- PR -

NumericUpDownの値変更

投稿者投稿内容
ユウジ
会議室デビュー日: 2003/03/23
投稿数: 7
投稿日時: 2006-06-22 16:17
Visual Studio .NET 2003(C#)を使って開発をしています。

NumericUpDownの値が直接入力、または右端のUPDOWNボタンにて値を変更された場合のみ
処理が動くようにしたいと思っています。
試しに"ValueChanged"イベントを使ってみましたところ、"Value"プロパティの値が変更
された時に発生してしまうため、コード上で値を変更した場合もイベントが発生してし
まいます。
画面上から値を変更した場合のみ、処理をさせたい場合はどうするのでしょうか?
フラグ等を設けるのでしょうか?それとも他に有効なイベントがあるのでしょうか?
他のみなさんはどのように対応しているのか気になり、書き込ませて頂きました。


[ メッセージ編集済み 編集者: ユウジ 編集日時 2006-06-22 16:17 ]
lalupin4
大ベテラン
会議室デビュー日: 2004/07/26
投稿数: 163
投稿日時: 2006-06-22 18:07
 ハンドラを抜く:
コード:
    this.アップダウン.ValueChanged -= new ...
    //この間で値変更
    this.アップダウン.ValueChanged += new ...

ユウジ
会議室デビュー日: 2003/03/23
投稿数: 7
投稿日時: 2006-06-23 14:14
lalupin4さん、ありがとうございます。
上記の方法でできました。
上記の方法をメソッド化し、対象のコントロールを引数で渡したいと考えているのですが、
例えば、以下のようなメソッドを作ったとして、"***"の部分に与えるメソッドはどのよ
うにすれば渡せるのでしょうか?

コード:
numericEditUpdate(System.Windows.Forms.NumericUpDown pNumericUpDown, double pValue)
{
	pNumericUpDown.ValueChanged += new System.EventHandler(***)
	(略)
}
 


ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2006-06-23 14:43
引用:

ユウジさんの書き込み (2006-06-23 14:14) より:
lalupin4さん、ありがとうございます。
上記の方法でできました。
上記の方法をメソッド化し、対象のコントロールを引数で渡したいと考えているのですが、
例えば、以下のようなメソッドを作ったとして、"***"の部分に与えるメソッドはどのよ
うにすれば渡せるのでしょうか?

コード:
numericEditUpdate(System.Windows.Forms.NumericUpDown pNumericUpDown, double pValue)
{
	pNumericUpDown.ValueChanged += new System.EventHandler(***)
	(略)
}
 





意味がわからんす・・メソッドなんだからイベントハンドラを結びつける必要なんてない。
numericEditUpdate(コントロール,値)で呼び出すだけ。

そんでもってこういうコントロール自体をわたすようなメソッドはやめた方がいい。
ユウジ
会議室デビュー日: 2003/03/23
投稿数: 7
投稿日時: 2006-06-23 15:15
引用:

ぶさいくろうさんの書き込み (2006-06-23 14:43) より:

意味がわからんす・・メソッドなんだからイベントハンドラを結びつける必要なんてない。
numericEditUpdate(コントロール,値)で呼び出すだけ。
そんでもってこういうコントロール自体をわたすようなメソッドはやめた方がいい。



画面上に複数のNumericUpDownコントロールがあるため、lalupin4さんに教えて頂いた
処理をメソッド化して、対象を引数として渡せるようにできないものかと考えました。
ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2006-06-23 16:17
引用:

ユウジさんの書き込み (2006-06-23 15:15) より:
画面上に複数のNumericUpDownコントロールがあるため、lalupin4さんに教えて頂いた
処理をメソッド化して、対象を引数として渡せるようにできないものかと考えました。


で解決したの?反対しつつも方法は提示したんだけど?僕。
メソッドなんだからハンドラの追加なんてしなくていいのね。ただ呼び出すだけでいい。
ユウジ
会議室デビュー日: 2003/03/23
投稿数: 7
投稿日時: 2006-06-23 16:42
引用:

ぶさいくろうさんの書き込み (2006-06-23 16:17) より:

メソッドなんだからハンドラの追加なんてしなくていいのね。ただ呼び出すだけでいい。



解決してません。
ごめんなさい、私の例が"+="で追加から始まってましたね。

コード:
	this.numericUpDown1.ValueChanged -= new System.EventHandler(this.numericUpDown1_ValueChanged);
	numericEdit1.Value = 1000;
	this.numericUpDown1.ValueChanged += new System.EventHandler(this.numericUpDown1_ValueChanged);



コード上で値を変更した場合に"ValueChanged"イベントを発生させたくないため、
lalupin4さんに教わった方法を行っております
ただ、画面上にNumericUpDownコントロールが複数あるため、メソッド化しようと
思いまして。
"numericUpDown1"の部分は引数で渡しているんですけど。
"this.numericUpDown1_ValueChanged"の部分をどのように引っ張ってきて、
EventHandlerに渡せば良いのか、分からないのです。
まどか
ぬし
会議室デビュー日: 2005/09/06
投稿数: 372
お住まい・勤務地: ますのすし管区
投稿日時: 2006-06-23 16:48
引用:

例えば、以下のようなメソッドを作ったとして、"***"の部分に与えるメソッドはどのよ
うにすれば渡せるのでしょうか?

コード:
	pNumericUpDown.ValueChanged += new System.EventHandler(***)
 





そもそもご自分で+= new System.EventHandler(***)と書いているので、型がわかっているのにと思うのですが。。。

デリゲートがわからないのであれば、下記などを参照してください。

「イベントとデリゲート」
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/cpguide/html/cpconEventsDelegates.asp

スキルアップ/キャリアアップ(JOB@IT)