2017-07-04 53 views
0

我有一個「退出」按鈕,可根據變量更改文本。當一個點擊,變量增加,應用程序退出時,無功爲2單擊時需要更改文本按鈕,然後再單擊外側時更改爲

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(); 
      } 

我想QuitVar變回0時,該按鈕外部的用戶點擊,按鈕上的文字是「跳槽」。有沒有辦法在C#中做到這一點?

+0

你在使用什麼API? WPF? WinForm的? ASP.NET? UWP? –

+0

需求/設計不好。 –

+0

@DourHighArch Windows窗體。 –

回答

0

用戶可能點擊的地方太多,而不是Quit按鈕。可能更容易的是檢測鼠標何時離開退出按鈕MouseLeave event

通過轉到控制屬性(我在這裏使用的按鈕)和事件(照明符號),MouseLeave事件裏面,然後雙擊,它會生成一個模板事件處理方法爲您提供:
enter image description here

內部的事件處理程序,設置你的文字和QuitVar適當:

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

謝謝,我認爲這會做到。 –

+0

這不會檢測到退出按鈕外部的點擊,只是鼠標已經移出。 – ainwood

+0

@ainwood真。但它仍然解決了這個問題。在用戶甚至可以點擊按鈕之外之前,狀態被重置。 – Ian

0

你可以嘗試創建一個自定義ToolstripMenuItem,並重寫WndProc方法。
覆蓋可以捕獲窗口消息,並在點擊不在該項目上時通知。下面的代碼從代碼改編來關閉表單,如果用戶點擊它,但它應該適合您的目的。

/// <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; 
      } 
     } 
    }