Wie verstecke ich nur die Schaltfläche Schließen (x)?

151

Ich habe einen modalen Dialog und muss die Schaltfläche Schließen (X) ausblenden, kann sie jedoch nicht verwenden ControlBox = false, da ich die Schaltflächen Minimieren und Maximieren beibehalten muss.

Ich muss nur die Schaltfläche Schließen ausblenden. Gibt es eine Möglichkeit, dies zu tun?

Vielen Dank!

Update: Ich hatte die Erlaubnis, es zu deaktivieren, was einfacher ist :) Vielen Dank an alle!

stefano m
quelle
Könnte dies das sein, was Sie wollen: [Schaltfläche zum Schließen schließen [X] von Win Forms in C # .NET ausblenden ] ( sameeramrutia.wordpress.com/2008/09/16/… ) nur gegoogelt : hide close button c#, zweites Ergebnis hier! =)
Miguel Angelo
Sie liegen falsch, ich möchte die Schaltfläche nicht deaktivieren, aber verstecken Sie sie. Können Sie eine Lösung finden?
Stefano m
8
Bedürfnis ist ein starkes Wort. Woher kommt diese Anforderung? Was ist die eigentliche Anforderung - dass der Benutzer das Programm nicht beenden kann oder dass die Benutzeroberfläche "so aussieht, als hätte sie keine Schaltfläche zum Schließen"? Weil es andere Möglichkeiten gibt, dies zu umgehen, und es Ihnen schwer fallen wird, alle vollständig zu schließen (z. B. Task-Manager, Taskkill, möglicherweise Alt + F4 usw.). Ich persönlich würde nicht zu hart daran arbeiten, denn wenn Sie nicht Ihre gesamte App neu skinnen, wird dies unnötige Mühe bedeuten und die Erwartungen / Kontinuität der Benutzer mit anderen Windows-Programmen beeinträchtigen.
Merlyn Morgan-Graham
4
@ Sayem es enthüllt diese Seite, also sei nicht so ein Kritiker.
Brian Graham
1
Kratzen Sie auch die Minimierungsschaltfläche von Ihrer Liste. Durch das Minimieren eines modalen Dialogfelds wird es automatisch geschlossen. Dies ist notwendigerweise das einzige Fenster, das noch aktiviert ist. Wenn Sie es minimieren, bleibt kein Fenster mehr übrig, das den Fokus erhalten kann, sodass der Benutzer nicht zu Ihrem Programm zurückkehren kann. Sie befinden sich jetzt in "Ist das noch sinnvoll?" Gebiet. Das tut es nicht.
Hans Passant

Antworten:

147

Sie können es nicht ausblenden, aber Sie können es deaktivieren, indem Sie die CreateParams-Eigenschaft des Formulars überschreiben.

private const int CP_NOCLOSE_BUTTON = 0x200;
protected override CreateParams CreateParams
{
    get
    {
       CreateParams myCp = base.CreateParams;
       myCp.ClassStyle = myCp.ClassStyle | CP_NOCLOSE_BUTTON ;
       return myCp;
    }
}

Quelle: http://www.codeproject.com/KB/cs/DisableClose.aspx

Daniel A. White
quelle
danke, ich habe diese lösung gefunden, aber wir möchten sie verstecken, nicht nur deaktivieren :( anywat danke!
stefano m
4
Es gibt keine andere Möglichkeit, als Ihr Formular von Grund auf neu zu gestalten.
Daniel A. White
Ja. Erstellen Sie besser Ihr eigenes Formular mit Ihrem eigenen Kontrollkästchen ohne die Schaltfläche zum Schließen, und verbergen Sie dann das Kontrollkästchen des übergeordneten Formulars.
Bahamut
Die Antwort von 'Abhishek.Chopra' ist einfach und effektiv.
Altaf Patel
Wie kann ich es zur Laufzeit wieder aktivieren?
Mike de Klerk
158

Wir können die Schaltfläche zum Schließen des Formulars durch Festlegen ausblenden this.ControlBox=false;

Abhishek.Chopra
quelle
29
Haben Sie die Frage gelesen, in der er angegeben hat, dass dies keine Option ist?
Servy
28
Habe eine Google-Suche durchgeführt und diese SO QA war der Top-Hit. Und diese Antwort war das, wonach ich gesucht habe. Vielen Dank, Abhishek ...
Abel Gaxiola
15
Das verbirgt all diese Größenschaltflächen. Nicht nur der X.
Rich Shealer
1
Ich danke dir sehr! Einfachster Weg.
26

Nun, Sie können es ausblenden, indem Sie das gesamte Systemmenü entfernen:

private const int WS_SYSMENU = 0x80000;
protected override CreateParams CreateParams
{
    get
    {
        CreateParams cp = base.CreateParams;
        cp.Style &= ~WS_SYSMENU;
        return cp;
    }
}

Dadurch werden natürlich die Schaltflächen zum Minimieren und Maximieren entfernt.

Wenn Sie das Systemmenü beibehalten, aber das Schließen-Element entfernen, bleibt die Schaltfläche zum Schließen erhalten, ist jedoch deaktiviert.

Die letzte Alternative besteht darin, den Nicht-Kundenbereich selbst zu malen. Das ist ziemlich schwer richtig zu machen.

David Heffernan
quelle
4
Das funktioniert auch super! Aber ControlBox = false ist einfach zu verwenden.
Simmeone
1
Dies entspricht der Einstellung ControlBoxauf false. Außerdem ist die Anforderung nicht erfüllt: Ich muss die Schaltflächen Minimieren und Maximieren
beibehalten
23

Sie können die Schließbox mit ausblenden

this.ControlBox = false;

und vergessen Sie nicht, Leerzeichen hinzuzufügen this.Text = " ", um es so zu machen

Geben Sie hier die Bildbeschreibung ein

Ramgy Borja
quelle
2
Das ist das, was ich benötige. Vielen Dank.
Kosmas
2
Das ist nicht richtig. Direkt aus OPs Frage: Ich kann nicht verwendenControlBox = false
Martin
8

Wenn Sie es wirklich ausblenden möchten, wie in "nicht sichtbar", müssen Sie wahrscheinlich ein randloses Formular erstellen und die Beschriftungskomponenten selbst zeichnen. In der VisualStyles-Bibliothek stehen die Windows-Elemente zur Verfügung. Sie müssten auch die Funktionalität zum Ändern der Größe des Formulars oder zum Verschieben des Formulars durch Ergreifen der Beschriftungsleiste wieder hinzufügen. Ganz zu schweigen vom Systemmenü in der Ecke.

In den meisten Fällen ist es schwer zu rechtfertigen, dass die Schaltfläche "Schließen" nicht verfügbar ist, insbesondere wenn Sie ein modales Formular mit Minimierungsfunktionen wünschen. Das Minimieren einer modalen Form macht wirklich keinen Sinn.

LarsTech
quelle
2

Setzen Sie in den Eigenschaften Ihres Formulars 'Control Box' = False, aber es werden auch Minimized und Maximize ausgeblendet.

Muhammad Haroon
quelle
1

Nun, Sie können die Schaltfläche zum Schließen ausblenden, indem Sie den FormBorderStyle im Eigenschaftenbereich oder programmgesteuert im Konstruktor ändern, indem Sie:

public Form1()
{
InitializeComponent();
this.FormBorderStyle = FormBorderStyle.None;
}

Anschließend erstellen Sie ein Menüleistenelement, um die Anwendung zu beenden.

Prost

Josh John
quelle