Optisch entfernen / deaktivieren Schließen-Schaltfläche von Titelleiste .NET
Frage
Ich habe die Schließen-Schaltfläche aus unserer VB .NET 2005 MDI-Anwendung zu entfernen oder deaktivieren gefragt. Es sind keine nativen Eigenschaften auf einer Form, die es Ihnen ermöglichen, die Schließen-Schaltfläche grau aus, damit der Benutzer es nicht in der Nähe kann, und ich erinnere mich an nichts in der Formularklasse zu sehen, die mir erlauben, dies zu tun.
Gibt es vielleicht einen API-Aufruf oder eine magische Eigenschaft festlegen oder die Funktion Aufruf in .NET 2005 oder höher, dies zu tun?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Weitere Informationen:
Ich brauche das Minimieren / Maximieren-Funktionalität
haltenIch brauche die ursprüngliche Titelleiste zu halten, da die Zeichenmethoden des Formulars sind bereits sehr komplex.
Lösung
Basierend auf den neuesten Informationen, die Sie zu Ihrer Frage hinzugefügt, bis zum Ende meiner Antwort überspringen.
Dies ist, was Sie Satz auf false müssen: Wie zu deaktivieren Schaltfläche zum schließen von Fenstern Form .NET-Anwendung mit
Dies ist die VB-Version von JDM Code:
Private Const CP_NOCLOSE_BUTTON As Integer = &H200
Protected Overloads Overrides ReadOnly Property CreateParams() As CreateParams
Get
Dim myCp As CreateParams = MyBase.CreateParams
myCp.ClassStyle = myCp.ClassStyle Or CP_NOCLOSE_BUTTON
Return myCp
End Get
End Property
Andere Tipps
Sie können die Schließen-Schaltfläche und den engen Menüpunkt im Systemmenü deaktivieren, indem Sie den „Klassenstil“ des Fensters zu ändern. Fügen Sie den folgenden Code in das Formular:
const int CS_NOCLOSE = 0x200;
protected override CreateParams CreateParams {
get {
CreateParams cp = base.CreateParams;
cp.ClassStyle |= CS_NOCLOSE;
return cp;
}
}
Dies wird nicht nur das Fenster stoppen geschlossen zu werden, aber es wird tatsächlich auf die Schaltfläche ausgegraut. Es ist C #, aber ich denke, es ist einfach, es zu VB zu übersetzen sein sollte.
Hier ist eine einfache Möglichkeit, die Schließen-Schaltfläche zu entfernen:
1. Form wählen
2. Nun zu Properties
gehen.
Finden 3. ControlBox
und ändern Sie den Wert auf False
.
Dies entfernt alle die Steuertasten (z. Minimieren, Maximieren Exit) und auch das Symbol auch die vor dem Titel in dem nach links ist.
Es sollte möglich sein, das OnClose-Ereignis des Formulars zu überschreiben. Dies ist üblich, wenn eine Anwendung minimiert auf der Taskleiste, wenn „geschlossen“.
Wenn Sie die X-Box auf dem Formular drücken.
Die Form1_Closing
wird zuerst gemacht, dann wird die Form1_Closed
getan.
Die e.Cancel = True
im Form1_Closing
-. Verhindert Form1_Closed
von daher aufgerufen wird, das Formular zu verlassen noch aktiv
Prevent das Formular zu schließen, aber versteckt sie:
Private Sub Form1_Closing(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
Me.WindowState = FormWindowState.Minimized
Me.Visible=false
e.Cancel = True
End Sub
Sie können die ControlBox
Eigenschaft auf False
gesetzt, aber die ganze Titelleiste wird verschwunden sein, aber der Titel selbst ...
Was jmweb sagte hier OK ist als gut. Die X-Schließen-Schaltfläche wird nicht gehen, wenn Sie das Ereignis auf Formular Schließen abzubrechen. Aber dabei müssen Sie das Formular Bedürfnisse, die Prozesse lösen und dann das Formular zu schließen.
Me.Dispose()
Me.Close()
Das ist für mich gearbeitet Menüleiste verwenden.
Wählen Sie (oder klicken), um das Formular selbst
Klicken Sie auf Ereignisse im Eigenschaftsfenster (das kleine Blitzsymbol).
Suchen Sie nach Form.Closing
und doppelklicken Sie darauf.
Geben Sie dann: e.cancel=true
Erstellen eines Formulars ohne Titlebar in Visual Basic.
Zur Form Properties
und setzt sowohl ControlBox
und ShowIcon
auf false gesetzt.
Dann klar alle der Text aus dem text
Eigenschaft des Formulars.
gehen Sie auf Eigenschaften und wählen Sie aus Langeweile Stil wie keine
Wählen Sie einfach die gewünschte Form und im Eigenschaftenabschnitt gesetzt CONTROLBOX = false Das nur für mich gearbeitet:)
Private Sub Form1_Closing(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
Beep()
e.Cancel = True
End Sub