2017-07-04 1 views
0

Ich habe eine "Quit" -Schaltfläche, die den Text basierend auf einer Variablen ändert. Wenn nach dem anderen, um die Variable erhöht angeklickt, und die Anwendung beendet wird, wenn die var 2. istButton muss den Text ändern, wenn er angeklickt wird, und dann wieder ändern, wenn er außerhalb klickt

public static int QuitVar = 0; 

     private void quitToolStripMenuItem_Click(object sender, EventArgs e) 
     { 
      QuitVar = QuitVar + 1; 

      if (QuitVar == 0) 
      { 
       quitToolStripMenuItem.Text = "Quit"; 
      } 

      if (QuitVar == 1) 
      { 
       quitToolStripMenuItem.Text = "Really?"; 
      } 

      if (QuitVar == 2) 
      { 
       QuitVar = 0; 
       Application.Exit(); 
      } 

würde Ich mag wieder auf 0 QuitVar zu ändern, wenn der Benutzer klickt außerhalb der Schaltfläche, so dass der Button-Text ist „beenden ". Gibt es eine Möglichkeit, dies in C# zu tun?

+0

Welche API verwenden Sie? WPF? WinForm? ASP.NET? UWP? –

+0

die Anforderung/Design ist schlecht. –

+0

@DourHighArch Windows Forms. –

Antwort

0

Es gibt zu viele Orte, an denen ein Benutzer klicken könnte, die nicht die Quit-Schaltfläche sind. Was einfacher ist, ist zu erkennen, wenn die Maus die Quit-Taste mit der MouseLeave event verlässt.

Durch die Steuerungseigenschaften gehen (ich habe einen Button hier) und Events (die Beleuchtung Symbol), dann einen Doppelklick innerhalb des Mouseleave-Ereignisses, wird es eine Vorlage Ereignisbehandlungsmethode für Sie generiert:
enter image description here

Innerhalb dieser Event-Handler, stellen Sie Ihren Text und QuitVar entsprechend:

private void quitToolStripMenuItem_MouseLeave(object sender, EventArgs e) 
{ 
    QuitVar = 0; 
    quitToolStripMenuItem.Text = "Quit"; 
} 
+0

Danke, ich denke, das wird es tun. –

+0

Dies wird keinen Klick außerhalb der Schaltfläche "Beenden" erkennen, nur dass die Maus sich davon entfernt hat. – ainwood

+0

@ainwood Wahr. Aber es löst immer noch das Problem. Der Status wird zurückgesetzt, bevor der Benutzer außerhalb der Schaltfläche klicken kann. – Ian

0

Sie könnten versuchen, die WndProc Methode eine benutzerdefinierte ToolStripMenuItem und außer Kraft zu schaffen.
Die Überschreibung kann die Windows-Nachrichten erfassen und benachrichtigen, wenn sich der Klick nicht auf dem Element befindet. Der folgende Code wird aus Code zum Schließen eines Formulars angepasst, wenn der Benutzer außerhalb des Formulars klickt, aber es sollte zu Ihren Zwecken passen.

/// <summary> 
    /// Function to capture if the user clicks outside of the control, in which case need to close this form. 
    /// </summary> 
    protected override void WndProc(ref Message m) 
    { 
     base.WndProc(ref m); 

     // if click outside dialog -> Close Dlg 
     if (m.Msg == 0x86) //0x86 = NativeConstants.WM_NCACTIVATE 
     { 
      if (this.Visible) 
      { 
       if (!this.RectangleToScreen(this.DisplayRectangle).Contains(Cursor.Position)) 
        QuitVar = 0; 
      } 
     } 
    } 
Verwandte Themen