使用一个可重用的单独类,需要传递一个函数,该函数将从上下文菜单中的click事件中调用...
问题:函数不是类型EventHandlers ....还有不同的EventHandlers需要不同的参数...例如退出按钮的OnClose ....
编辑:
在第X类
public void AddMenuItem(String name, EventHandler target )
{
MenuItem newItem = new MenuItem();
newItem.Index = _menuItemIndex++;
newItem.Text = name;
newItem.Click += target;
_contextMenu.MenuItems.Add(newItem);
}
在Wpf中:
addToTray.AddMenuItem("&Exit", Exit);
我希望它链接到以下方法,但此时任何方法都可以。
private void ShouldIExit(object sender, System.ComponentModel.CancelEventArgs e)
{
// checks if the Job is running and if so prompts to continue
if (_screenCaptureSession.Running())
{
MessageBoxResult result = System.Windows.MessageBox.Show("Capturing in Progress. Are You Sure You Want To Quit?", "Capturing", MessageBoxButton.YesNo);
if (result == MessageBoxResult.No)
{
e.Cancel = true;
return;
}
}
_screenCaptureSession.Stop();
_screenCaptureSession.Dispose();
}
答案 0 :(得分:2)
我猜测问题是您的ShouldIExit
方法与EventHandler
委托不匹配。尝试更改它以获取常规EventArgs
参数,并查看是否有效。最好避免为不同的事件类型重用相同的事件处理程序。您应该将公共代码封装到单独的方法中,然后让不同的处理程序调用该代码。
private bool CheckExit()
{
// checks if the Job is running and if so prompts to continue
if (_screenCaptureSession.Running())
{
MessageBoxResult result = System.Windows.MessageBox.Show("Capturing in Progress. Are You Sure You Want To Quit?", "Capturing", MessageBoxButton.YesNo);
if (result == MessageBoxResult.No)
{
return false;
}
}
_screenCaptureSession.Stop();
_screenCaptureSession.Dispose();
return true;
}
private void ExitButtonClicked(object sender, System.ComponentModel.CancelEventArgs e)
{
if (!CheckExit())
{
e.Cancel = true;
}
}
private void ExitMenuItemClicked(object sender, EventArgs e)
{
CheckExit();
}
答案 1 :(得分:0)
这有点模糊,但你可以做到
OnClose += (sender,e) => YourFunction(...)
其缺点是,如果需要,无法再次删除事件处理程序