Я просто изучаю канаты в моно и GTK #, и я столкнулся с этой проблемой.Не могу подписаться на событие
Я строю простой MVC наоборот - сверху вниз (т. Е. Я буду строить интерфейсы/контракты позже).
У меня есть класс контроллера:
public class ScanComparerController
{
ScanComparerModel model;
MainWindow view;
public ScanComparerController()
{
model = new ScanComparerModel();
view = new MainWindow();
view.Show();
view.Do += new MainWindow.DoHandler(PerformAction);
}
void PerformAction(MainWindow o, EventArgs e)
{
DoStuff();
}
}
У меня есть класс вид:
public partial class MainWindow: Gtk.Window
{
public event DoHandler Do;
public delegate void DoHandler(MainWindow m, EventArgs e);
public MainWindow(): base (Gtk.WindowType.Toplevel)
{
Build();
btnGo.Clicked += buttonGo_clicked;
}
void buttonGo_clicked(object o, EventArgs e)
{
CheckConditions();
if (Do != null)
Do (this, EventArgs.Empty);
}
Теперь, по какой-то причине, мнение всегда считает, что Do == null
, в то время как он не должен , потому что я добавляю к нему слушателя сразу после инициализации. Тем не менее, мой код выглядит точно так же, как и I refer to.
Я знаю, что это, вероятно, что-то тривиальное, что я пропустил, но я не могу понять это.
EDIT 1
Как было предложено неопределен, я попытался поменять местами строки:
view.Do += new MainWindow.DoHandler(PerformAction);
view.Show();
без успеха, однако. Тем не менее, Do == null
и PerformAction
никогда не называются.
EDIT 2
Я попытался eleting пользовательского обработчика и перехода к общей EventHandler, как это было предложено AdamBilinski. Тем не менее, без успеха.
EDIT 3
Я перепроверил и Do
нет ссылок нигде в коде.
Есть ли причина, по которой вы используете свой собственный обработчик событий? Почему не просто публичное событие EventHandler Do ;? –
@AdamBilinski, нет. Изменен для EvenHandler, без успеха. Он должен работать, не так ли? – moskalak