2

C# で datetimepicker を使用しています。クリックすると展開して月間カレンダーが表示され、左矢印をクリックして 1 か月前に戻ると、値が変更されてイベントが呼び出されます。このイベントには、ここに含めるには多すぎるコードが含まれていますが、言うまでもなくいくつかの関数を呼び出します。
私が抱えている問題は、その左矢印をクリックすると、ある種のループに陥り、数か月間下降し続け、それを止めることができないことです. 呼び出されている関数の 1 つに Application.DoEvents() が含まれており、それをコメントアウトしてもループに陥ることはありませんが、インターフェイスの別のセクションを更新するにはそのコマンドが必要です。なぜこれが起こっているのですか?

このコードで複製できる場合もあれば、数回実行する場合もあれば、ループでスタックする場合もあります。

private void DateTimePickerValueChangedEvent(object sender, EventArgs e) 
{ 
afunction(); 
} 

private void afunction() 
{ 
listView1.Clear(); 
panel1.Visible = true; 
Application.DoEvents(); 
} 
4

5 に答える 5

4

私も同じ問題を抱えています。私の場合、DoEvents を呼び出す代わりに、Crystal Report ビューを更新しています。私が見つけた唯一の回避策は、ValueChanged または TextChanged ではなく、CloseUp イベントでビューを更新することです。

スコット、あなたは最終的にどのように問題を解決しましたか?

于 2010-02-01T04:25:56.753 に答える
1

コードが表示されない場合は、次の手順を試してください。

  1. イベント ハンドラー全体をコメント アウトして、何もアタッチされていない場合の実行速度を確認します。
  2. 一度に 1 行ずつコメントを外して、どの行が最も問題を引き起こしているかを確認します。
  3. これらのメソッド呼び出しを分析します。
  4. ...
  5. 利益!
于 2009-10-13T19:38:19.740 に答える
0

いくつかのことを試すことができます。ChangedEvent 内の DoEvents を取り除きます。おそらく一定時間後に別の関数内で doevents を呼び出します (thread.sleep() ?)。

doevents が問題を引き起こすことは知っていますが、めったに使用しません。

于 2009-10-13T19:54:44.433 に答える
0

イベント プロシージャValueChanged: enableTimer にパラメーターを設定し、sender.tag sender.tag を使用してパラメーターを実行します。

例:

private void DateTimePicker_ValueChanged(object sender, EventArgs e)
    {
        DateTimePicker ThisSender = (DateTimePicker)sender;
        Timer.Tag = ThisSender.Name.ToString() + "=" + ThisSender.Value;
        Timer.Enabled = true;
    }
于 2021-01-11T10:41:28.423 に答える