0

解決済み:皆さんは最高です!私はすべての内容を取り、goyouidiot_Clickそれをと呼ばれるメソッドに作りましたdisplayResult、そしてそれから:

 private void t1_TextChanged(object sender, EventArgs e)
       {
        displayResult();
       }

以前はどう思いませんでしたか?笑、thx

これがオリジナルのメッセージです:

孤独な前に、私は15の数値の平均を計算する小さなソフトウェアを作成しました。buttunがクリックされるとコードが実行を開始しますが、このコードをプログラムで実行を開始する無限ループに入れたいので、回答は自動更新されます。これは私のコードです:

private void goyouidiot_Click(object sender,

EventArgs e){。。。。}

と理解していない人:

15個のテキストボックスがあり、テキストボックスの内容が変更されたときにメソッドを実行したいと思います。

4

4 に答える 4

9

無限ループを作成するのではなく(バックグラウンドスレッド上にない限り、アプリケーションがハングします-ワームのはるかに大きな缶です)、変更イベントに応答する必要があります。

番号がテキストボックスで更新されている場合は、それぞれのTextChangedイベントをgoyouidiot_Clickメソッドにバインドするだけです。メソッドの名前を変更する必要があります。

編集

エリックが彼の答えで指摘しているように、これらのイベントが機能する理由は、実際には、変更をリッスンするための無限ループ(Windowsメッセージポンプ)があるためです。このループはRun、アプリケーションでメソッドを呼び出すと開始されます。

于 2010-07-13T13:39:26.453 に答える
3

無限ループが関与しなければならないというあなたの直感は正しいです。しかし、そのループを自分で書きたくはありません。ランタイムライブラリはすでにそれをあなたのために書いています。あなたが読みたいのは、イベント駆動型プログラミングです。たとえば、次のような良い紹介を見つけます。

http://www.c-sharpcorner.com/UploadFile/sksaha/EventsinNet11152005043514AM/EventsinNet.aspx

イベント駆動型プログラミングが舞台裏で機能する方法は、オペレーティングシステムから着信するメッセージのキューの状態を監視するコードの無限ループがあることです。メッセージは、マウスのクリックや入力などを表しています。次に、無限ループコードは、これらのメッセージをイベントの発生に変換します。これらのイベントの発生をリッスンし、特定のイベントが発生したときにコードを実行できます。

于 2010-07-13T13:55:20.857 に答える
2

無限ループに入れると、システムのCPUパワーが不足する可能性があります。つまり、一時停止(Thread.Sleep)を導入する必要があります。

一時停止を使用する場合は、Timerオブジェクトを使用することもできます。フォームベースTimerまたはスレッドベースTimer( 、、System.Windows.FormsまたはSystem.Threading/ System.Timers)があります。

個人的には、タイマーを使用して希望の間隔でティックすることをお勧めします。

スレッドタイマーはデリゲート/スレッドプールを使用しますが、フォームベースのタイマーはメッセージをメッセージポンプに配置します。ティックの作成方法にオーバーヘッドがあるため、どちらも間隔に正確であるとは限りません。

于 2010-07-13T13:39:18.170 に答える
0

私が正しく理解している場合(Winformアプリケーションで15分ごとに何かを更新したい場合)、コードを定期的に実行するTimerクラスを使用することをお勧めします。

編集:テキストボックスの1つでテキストが変更されたときに計算を実行する場合は、これらのテキストボックスのTextChangedイベントのイベントハンドラーで実行する必要があります(すべてのテキストボックスに同じハンドラーを割り当てます)

于 2010-07-13T13:40:09.917 に答える