C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: [C#]changeイベントを発生させない方法


(過去ログ 17 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■7027 / inTopicNo.1)  [C#]changeイベントを発生させない方法
  
□投稿者/ nbmyou (5回)-(2007/08/29(Wed) 09:47:54)

分類:[C#] 

こんにちは。
初心者のnbmyouと申します。

フォームに二つの「NumericUpDown」のコントロールを置き、
一方が変更されれば、他方はその値を計算された値を表示するプログラムを作成しています。

そこで、各々のvalueChangeイベント発生時に他方のValueを変更するコードを記述したのですが、
Valueを変更するたびにvalueChangeイベントが発生するため、永久ループになってしまいました。

そこで、プログラムでのvalue変更時には、valueChangeイベントの発生を止めたいのですが
どのようにすればいいのかわかりません。

お手数ですが、ご教授いただけませんでしょうか。
よろしくお願いいたします。
引用返信 編集キー/
■7030 / inTopicNo.2)  Re[1]: [C#]changeイベントを発生させない方法
□投稿者/ 魔界の仮面弁士 (395回)-(2007/08/29(Wed) 10:53:40)
No7027 (nbmyou さん) に返信
> そこで、プログラムでのvalue変更時には、valueChangeイベントの発生を止めたいのですが
> どのようにすればいいのかわかりません。

適当なフラグ変数を用意しておいてはどうでしょうか。

たとえば、
 bool preEnabled = numericUpDown1.Enabled;
 numericUpDown1.Enabled = false;
 numericUpDown1.Value = 新しい値;
 numericUpDown1.Enabled = preEnabled ;
のように Enabled プロパティを『変更中フラグ』として用いて、ValueChanged イベント先頭に、
 if(numericUpDown1.Enabled == false) return;
と書いておくとか。

もし、Enabled の切り替えでは都合が悪いなら、bool 型のフィールド変数を用意してやれば OK 。


あるいは、Value の操作直前に ValueChanged のイベントハンドラを解除しておいて、
操作完了後に、もう一度再登録してみるという方法もあるかも。
引用返信 編集キー/
■7037 / inTopicNo.3)  Re[2]: [C#]changeイベントを発生させない方法
□投稿者/ nbmyou (9回)-(2007/08/29(Wed) 11:33:16)
魔界の仮面弁士様

フラグのメンバ変数を用意することで、実現できました。
どうもありがとうございます。

また、質問なのですが、
> あるいは、Value の操作直前に ValueChanged のイベントハンドラを解除しておいて、
> 操作完了後に、もう一度再登録してみるという方法もあるかも。
イベントハンドラの解除・再登録とは、
+=、-=で行うもののことでしょうか?
初歩的な質問で申し訳ありません。
引用返信 編集キー/
■7040 / inTopicNo.4)  Re[3]: [C#]changeイベントを発生させない方法
□投稿者/ 魔界の仮面弁士 (396回)-(2007/08/29(Wed) 11:59:39)
No7037 (nbmyou さん) に返信
> イベントハンドラの解除・再登録とは、
> +=、-=で行うもののことでしょうか?

はい。そのことです。
引用返信 編集キー/
■7042 / inTopicNo.5)  Re[4]: [C#]changeイベントを発生させない方法
□投稿者/ nbmyou (10回)-(2007/08/29(Wed) 12:10:41)
> はい。そのことです。

ありがとうございます。
イベントハンドラの解除・再登録の方法も試し、動作することを確認いたしました。

適切であり、また素早い回答をありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -