2016-05-09 10 views
0

これらの条件が満たされた後に条件が満たされた場合にのみメッセージボックスを表示するWindows Form Timerを使用するこのプログラムを作成しようとしています。会ったときにメッセージボックスに「今日のメッセージ」と表示されます。次に、doneのブール値がfalseに設定されます。これは、メッセージボックスが再び実行されるのを止めることを想定しています。ただし、メッセージボックスは引き続き表示されます。ここに私のコードは条件が満たされた場合にタイマーのティックでコマンドを1回だけ実行する方法

public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     String test = null; 
     bool done = false; 
     private void Form1_Load(object sender, EventArgs e) 
     { 
      timer1.Enabled = true; 
     } 


     private void timer1_Tick(object sender, EventArgs e) 
     { 
      test = "Good to see you"; 
      if (test != null && done == false) 
      { 
       MessageBox.Show(test); 

      } 
      done = true; 
     } 
    } 

は基本的に私は停止ONCE、メッセージボックスを表示したい...ですが、私はブール値がこれを行うための最善の方法だろうと思いました。他の方法はありますか?私はちょうど始まっている慈悲を持ってください。

+0

あなたのタイマーはTickを続ける必要がありますか?そうでない場合は、そのEnabledプロパティをfalseに設定して、条件で停止することができます。あるいは、何かを初めて実行する必要がある場合は、ブール値を使用して、上に記述したように、完了したらtrueに設定します。 – ManoDestra

+0

Windows.Forms.TImersは、バグに多くの問題を持ち、パターンを誤用しやすいものでした。私は彼らが最後のいくつかのリリースである程度修正されていると確信していますが、ただ注意してください。 – StingyJack

+0

また、その中でヌルチェックをする必要はありません。チェックの前に文字列を設定しています。 if構造の中でdoneをtrueに設定する必要があります。メッセージボックスを表示した後も、タイマーはまだ変化していないことに注意してください。そのため、ifBoxでMessageBoxを表示する前にdoneをtrueに設定する必要があります。あなたのUIで何かをする前に、常に状態を変更してください。 'done == false'を'!done'に変更します。 – ManoDestra

答えて

2

メッセージボックスを表示する前にdone=true;に移動してください。

関連する問題