私はクラスMyClass
,a
およびb
のインスタンスを持っています。 MyClass
にはフィールドText
があります。 MyEvent(MyClass target)
をb.Selected
に割り当てたいとします。このイベントが発生すると、このイベントはa.Text
に変更されます。 「それはa
のText
になるだろう、私の意図はa
のText
は 『フー』、になりますがb
場合 "ということであるの選択されたイベント火災、イベントを別のオブジェクトに変更する
void MainMethod()
{
var a = new MyClass();
a.Text = "Foo";
var b = new MyClass();
b.Selected += MyEvent(a); // Make the event fire when b is "selected"
}
void MyEvent(MyClass target) {
target.Text = "Bar";
}
を明確にする:私はこのようになりますいくつかのコードを持っていますバー"。
私は上記と同様のものを実装しようとしましたが、うまくいかなかった。 (VS2010は、なぜ私がnullであるのかわからなくても、MyEvent(a)
はnull引数のイベントであると主張しています)
私はイベントを非常によく理解していませんこれは明らかです。
DETAILS:実際には
、私はLabelSelectable
ないMyClass
を使用しています。 LabelSelectable
Control
は、ピクチャ、ボタン、ラベルなどのさまざまなものを画面に表示するためのクラスです(関連する場合はXNAです)。基本的にこの場合は、これらの選択可能なラベルの束を矢印で循環させることができます。指定されたラベルにEnterキーを押すと、Selected
イベントが発生します。
私は実際にこのチュートリアルに従っていました。そこに実装の詳細があります。 (私は役に立たないことを意味するわけではありませんが、どの部分が関連しているのかわからないのか正確には分からないので、ここにすべてを置くと多くのコードになります)。
私のできる限り参照、「MyClass
は」このようなものになります。
MyClass
{
public event EventHandler Selected;
public string Text
{
get { return text; }
set { text = value; }
}
void OnSelected(EventArgs e)
{
if (Selected != null)
{
Selected(this, e);
}
}
}
を私は道で、動作するように以下のコードと同等のものを得ることができます。
void MainMethod()
{
var a = new MyClass();
a.Text = "Foo";
var b = new MyClass();
b.Selected += MyEvent; // Make the event fire when b is "selected"
}
void MyEvent(object sender, EventArgs e) {
Console.WriteLine("Event fired!");
}
それはコンソールに出力のものでしょうbがあるとき選択されました。
:
イベントのソースは、イベントハンドラにパラメータとして渡される標準イベンティングパターンに従うことadventageousかもしれ。 –
Nitpick - あなたのコード内の 'MyEvent'は、イベントではなくイベントハンドラです。 – Oded
MyClassはどのようなものから外れますか?それは視覚的なコンポーネントであり、祖先に実装された.Selectedプロパティです。イベントにはSenderとEventArgsの何らかの形式が必要です。 –