- - PR -
WindowsForm上の2つのコントロールを相互に連動させる方法
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-12-02 00:19
ある1つの設定値を更新させたいが、その手段を2つ(あるいは複数)用意したいとします。
例えばWindowsForm上にnumericUpDownコントロールとvScrollBarがあって ユーザーの好みに応じてどちらのコントロールでも自由に選べるようにしたい といったケースです。 どちらのコントロールを選択しても同じ効果が得られることが前提です。 つまり、同じメソッドが1回だけ呼び出されるようにしたいのです。 設定値は1つですから、片方のコントロールを動かしたら、 もう片方のコントロールは、更新された設定値と整合性を取るために 連動して動きます。 イベントが発生したら単純にメソッドを呼び出した後にもう片方のコントロールを 動かす処理を記述すると相互に相手を無限に呼び出しあってしまいます。 このような事態を回避しつつ、できれば簡潔に記述したいです。 良い工夫があれば教えてください | ||||
|
投稿日時: 2006-12-02 00:31
「現在の値と異なっていれば」という条件節を設ければ済む話だと思いますが?
// 少なくともコントロールの Changed 系イベントは元々そう言う風に実装されてるけど。 | ||||
|
投稿日時: 2006-12-02 10:36
案1)
ベタな方法ですが、フラグを立ててちまちまやります。
未検証ですけどこんな感じかと思います。 案2) それぞれのコントロールを継承して新たなクラスを作り、 public void ChangeValueWithoutEvent(int value) みたいなメソッドを用意して、内部ではフラグでちまちまやりつつ外からは奇麗に変更出来るようにします。 私なら、大抵は案1、暇とやる気があるときは案2でさらにインターフェースも作ったりするかも知れません(笑) | ||||
|
投稿日時: 2006-12-02 15:30
ご回答ありがとうございます。
一応、フラグを立てて処理できています。 やはりコントロールの数が増えてくると少し面倒ですね。 | ||||
|
投稿日時: 2006-12-02 20:36
ユーザは一つの設定値を更新するのに複数のコントロールで設定が出来てしまうのですか。 ユーザに必ずどれか一つのコントロールだけを選択させれば、コントロール間の整合性は不要になると思いました。 | ||||
|
投稿日時: 2006-12-02 21:13
この手の処理は、顧客要望が強い割りに、シンプルな実装がし辛いものです。
個々のコントロールのChangeEvent等にに依存すると,フラグの多用になり煩雑になります。 へたするとEvent連鎖でループに陥ることもあります。 更新したい値を持つ変数をクラス仕立てにし, そのクラスに変更が加わったら,関連するコントロールの値を更新するようにする。 そうすれは,コントロールのChangeは独立するので副作用はないかと思います。 _________________ ognac@わんくま同盟 | ||||
|
投稿日時: 2006-12-06 09:16
ご回答ありがとうございます。
Mutexで排他制御の対処をしています。 コントロールが増えると、記述が煩雑になり、苦労しています。 | ||||
|
投稿日時: 2006-12-06 10:08
すみません、逆に質問します。 どうして、ここで Mutex が出てくるのでしょうか? _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 |
1