2010-07-23 3 views
1

Теперь я попадаю в обработку событий, и это кажется мне довольно запутанным. Смотрите, я пришел из фона веб-разработчиков, поэтому это событие для меня совершенно новое.Увольнение пользовательских событий/Обработка общих событий

Я развиваюсь в C#/VS08 и создал свое приложение в WinForm-Designer.

Теперь я создал этот обзор программы;

ProgramContext 
MainForm : Form 
LoginForm : Form 

Итак, что я хочу сделать, когда пользователь нажимает кнопку «Выход» (Что такое пункт меню в MainMenu из MainForm), что приложение выходит из пользователя.

Но как я могу получить доступ к «Нажмите» событие пункта выхода из системы из поля зрения ProgramContext, поскольку есть вся логика входа в систему и т.д.

Я попытался следующие

MenuItem[] findLogout = MainMenuStrip.Items.Find("logoutMenuItem", true); // Throws NullPointerException 
findLogout[0].Click += new EventHandler(LogoutClick); 

private void LogoutClick(object sender, EventArgs e) 
{ 
// Logout user 
} 

Но продолжайте получать исключение NullPointerException в первой строке.

+0

так, где именно так вы получаете ex ception? – ULysses

+0

Первая строка примера 'MenuItem [] findLogout ...' –

+0

Можете ли вы проверить, что MainMenuStrip не является нулевым в точке вызова и что MainMenuString.Items не является нулевым в точке вызова и что findLogout не является пустым массив? Без контекста они кажутся самыми слабыми точками в коде для ссылок NULL. –

ответ

2

Проще всего сделать это, чтобы выставить событие на MainForm:

public EventHandler LogOut; 

Затем зацепить в это с вашего ProgramContext:

MainForm form = new MainForm(); 
form.LogOut += new EventHandler(MainForm_LogOut); 

void MainForm_LogOut(object sender, EventArgs e) 
{ 
    // Logout 
} 

Затем огонь кнопка LogOut нажата на MainMenu с помощью следующий код в событии щелчка элемента меню:

private void LogoutClick(object sender, EventArgs e) 
{ 
    if (LogOut != null) 
    { 
     LogOut(sender, e); 
    } 
} 
+0

@ ApoY2k - Это практика, которую я использую лично. Скажем, например, вы добавляете в свой MainForm еще одну кнопку выхода из системы или добавляете таймаут, который вызывает выход из системы. Разве вы не хотите, чтобы это было сообщено также в контексте программы? Используя ваш текущий метод, вам нужно будет захватить событие на объект, который приведет к выходу из системы. В моем примере вы просто вызываете 'LogOut (sender, e);' на любом pont, где вы хотите выполнить выход из системы. – GenericTypeTea

Смежные вопросы