У меня есть экземпляры класса MyClass
, a
и b
. MyClass
имеет поле Text
. Я хотел бы назначить событие MyEvent(MyClass target)
на b.Selected
, чтобы при запуске это событие изменяло a.Text
. У меня есть код, который выглядит следующим образом:
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";
}
Чтобы уточнить, я намерен сделать так, чтобы a
s Text
было бы "Foo", но если сработало событие b
Selected, оно a
'Text
станет "Баром".
Я пытался реализовать что-то похожее на вышеописанное, но это не сработало. (VS2010 утверждал, что MyEvent(a)
- это событие с нулевым аргументом, хотя я не понимаю, почему a является нулевым.)
Я не очень хорошо понимаю события (я пытаюсь их изучить), поэтому извините, если это очевидно.
ПОДРОБНОСТИ:
На практике я использую LabelSelectable
, а не MyClass
. LabelSelectable
extends 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.