トップ回答者
イベントの発生を確認する方法

質問
-
はじめての投稿です。よろしくお願いいたします。
現在、VB 2008 Express を使用して、コントロールを制作中です。
VB と C# の違いがよくわからず、どのようにコーディングしていいのかわかりません。
下記のコードで、Value プロパティの Set 時に値が更新された場合において、ValueChanged イベントが発生していない場合、ValueChanged イベントを発生させようと思っています。
C# の場合、「ValueChanged != null」= 「true」であれば、ValueChanged イベントが発生していないことが確認できますが、VB の場合は、どうすれば確認できるのでしょうか?
/// C# のコード/// フィールド
private int _value = 0;/// イベント
public event EventHandler ValueChanged;/// プロパティ
public int Value
{
get { return _value; }
set
{
bool valChanged = (_value != value);
_value = value;/// Value プロパティの値が更新された場合において、
/// ValueChanged イベントが発生していない場合は、ValueChanged イベントを発生させる
if ((ValueChanged != null) && (valChanged))
ValueChanged(this, new EventArgs());
}
}
' VB のコード' フィールド
Private _value As Integer = 0' イベント
Public Event ValueChanged As EventHandler' プロパティ
Public Property Value() As Integer
Get
Return _value
End Get
Set(ByVal value As Integer)
Dim valChanged As Boolean = False
If Not _value = value Then valChanged = True
_value = value'TODO: 「Not ValueChanged Is Nothing」では、エラーとなります。
If Not ValueChanged Is Nothing And valChanged Then RaiseEvent ValueChanged(Me, New EventArgs())
End Set
End Property
回答
-
bell3 さんからの引用 C# の場合、「ValueChanged != null」= 「true」であれば、ValueChanged イベントが発生していないことが確認できますが、VB の場合は、どうすれば確認できるのでしょうか?
「イベントの発生」と言われると、そのイベントの呼び出しが行われたことと認識しました。
今回の場合、イベントハンドラが割り当てられているかどうか、イベントハンドラが設定されているかどうかといったようなことだと思います。
で、あまり関係ないことだけを書くのは難なので、Tips的に書きます。
C#の場合、匿名デリゲートで空のイベントハンドラを最初から入れておくと、nullチェックがいらなくなります。
Code Snippetpublic event EventHandler ValueChanged = delegate { };
すべての返信
-
bell3 さんからの引用 C# の場合、「ValueChanged != null」= 「true」であれば、ValueChanged イベントが発生していないことが確認できますが、VB の場合は、どうすれば確認できるのでしょうか?
「イベントの発生」と言われると、そのイベントの呼び出しが行われたことと認識しました。
今回の場合、イベントハンドラが割り当てられているかどうか、イベントハンドラが設定されているかどうかといったようなことだと思います。
で、あまり関係ないことだけを書くのは難なので、Tips的に書きます。
C#の場合、匿名デリゲートで空のイベントハンドラを最初から入れておくと、nullチェックがいらなくなります。
Code Snippetpublic event EventHandler ValueChanged = delegate { };