wake-up-neo.net

Visuelles Entfernen/Deaktivieren der Schließen-Schaltfläche aus der Titelleiste von .NET

Ich wurde gebeten, die Schließen-Schaltfläche aus unserer Anwendung VB .NET 2005 MDI zu entfernen oder zu deaktivieren. Es gibt keine systemeigenen Eigenschaften in einem Formular, mit denen Sie die Schließen-Schaltfläche grau anzeigen können, sodass der Benutzer sie nicht schließen kann, und ich kann mich nicht erinnern, in der Formularklasse etwas gefunden zu haben, das mir dies ermöglicht.

Gibt es möglicherweise einen API-Aufruf oder eine magische Eigenschaft, die in .NET 2005 oder höher festgelegt oder ausgeführt werden muss, um dies zu tun?

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Mehr Informationen:

Ich muss die minimieren/maximieren-Funktionalität beibehalten

Ich muss die ursprüngliche Titelleiste beibehalten, da die Zeichenmethoden des Formulars bereits sehr komplex sind.

9
Jrud

Fahren Sie mit den neuesten Informationen, die Sie zu Ihrer Frage hinzugefügt haben, am Ende meiner Antwort fort.


Dies ist, was Sie auf false setzen müssen: Form.ControlBox-Eigenschaft

ABER Sie verlieren die Schaltflächen zum Minimieren und Maximieren sowie das Anwendungsmenü (oben links).

Alternativ können Sie OnClose überschreiben und Cancel auf true setzen (C # -Beispiel):

protected override void OnFormClosing(FormClosingEventArgs e)
{
    if (e.CloseReason != CloseReason.WindowsShutDown && e.CloseReason != CloseReason.ApplicationExitCall)
    {
        e.Cancel = true;
    }

    base.OnFormClosing(e);
}

Wenn keine dieser Lösungen akzeptabel ist und Sie nur die Schaltfläche zum Schließen deaktivieren müssen, können Sie die Route pinvoke/createparams wählen:

So deaktivieren Sie die Schaltfläche zum Schließen aus dem Fensterformular mit .NET-Anwendung

Dies ist die VB Version von jdms 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 
27
Philip Wallace

Sie können die Schaltfläche "Schließen" und den Menüeintrag "Schließen" im Systemmenü deaktivieren, indem Sie den "Klassenstil" des Fensters ändern. Fügen Sie Ihrem Formular den folgenden Code hinzu:

const int CS_NOCLOSE = 0x200;

protected override CreateParams CreateParams {
    get {
        CreateParams cp = base.CreateParams;
        cp.ClassStyle |= CS_NOCLOSE;
        return cp;
    }
}

Dadurch wird nicht nur das Schließen des Fensters verhindert, sondern die Schaltfläche wird auch ausgegraut. Es ist C #, aber ich denke, es sollte einfach sein, es in VB zu übersetzen.

10
jdm

So entfernen Sie den Schließen-Button auf einfache Weise:
1. Wählen Sie das Formular aus
2. Gehen Sie jetzt zu Properties.
3. Suchen Sie nach ControlBox und ändern Sie den Wert in False.

Dadurch werden alle Steuertasten (z. B. Minimieren, Maximieren, Beenden) und auch das Symbol in der linken Ecke vor dem Titel entfernt.

6
user2849882

Sie sollten in der Lage sein, das OnClose-Ereignis des Formulars zu überschreiben. Dies ist häufig der Fall, wenn eine Anwendung beim "Schließen" in die Taskleiste minimiert wird.

3
Dave Swersky

Wenn Sie das X-Feld in dem Formular drücken. Der Form1_Closing wird zuerst gemacht, dann wird der Form1_Closed gemacht.

Der e.Cancel = True im Form1_Closing - verhindert daher, dass Form1_Closed aufgerufen wird, sodass Ihr Formular weiterhin aktiv bleibt.

2
jmweb

Sie können die Eigenschaft ControlBox auf False setzen, aber die gesamte Titelleiste wird ausgeblendet, nur der Titel selbst ...

1
jonaspp

Verhindern Sie, das Formular zu schließen, aber verbergen Sie es:

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
1
user3781113

Was jmweb sagte hier ist auch in Ordnung. Die X-Schaltfläche zum Schließen wird nicht angezeigt, wenn Sie das Ereignis beim Schließen des Formulars abbrechen. Dazu müssen Sie jedoch die Prozesse freigeben, die das Formular benötigt, und dann das Formular schließen.

Me.Dispose()
Me.Close()

Dies funktionierte für mich mit Menu Strip.

0
azemoten

Wählen Sie das Formular selbst aus (oder klicken Sie darauf). Klicken Sie im Eigenschaftenfenster auf Ereignisse (das kleine Blitzsymbol). Suchen Sie nach Form.Closing und doppelklicken Sie darauf. Dann tippe: e.cancel=true

0
small_town_girl

Erstellen eines Formulars ohne Titelleiste in Visual Basic.

Gehen Sie zu Form Properties und setzen Sie sowohl ControlBox als auch ShowIcon auf false.

Löschen Sie dann all den Text aus der Eigenschaft text des Formulars.

0
Rahul Gurujala