2017-07-04 15 views
0

変数に基づいてテキストを変更する「終了」ボタンがあります。 1で、変数増加をクリックし、ときにvarが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; 
      } 
     } 
    } 
関連する問題