我创建了一个在用户右键单击时显示的上下文菜单。我无法弄清楚如何在单击其中一个菜单项时调用表单。请参阅下面的代码。
if (e.Button == MouseButtons.Right)
{
ContextMenu m = new ContextMenu();
m.MenuItems.Add(new MenuItem("New"));
m.MenuItems.Add(new MenuItem("-"));
m.MenuItems.Add(new MenuItem("Old"));
m.MenuItems.Add(new MenuItem("Lost"));
m.MenuItems.Add(new MenuItem("-"));
m.MenuItems.Add(new MenuItem("Found"));
switch(m.Name)
{
case "New":
new FrmInfo().ShowDialog();
break;
}
答案 0 :(得分:7)
您可以使用MenuItem(String, EventHandler)构造函数,它将OnClick事件处理程序作为第二个参数。
所以你的代码看起来像
m.MenuItems.Add(new MenuItem("New", MenuItemNew_Click));
...
private void MenuItemNew_Click(Object sender, System.EventArgs e)
{
new FrmInfo().ShowDialog();
}
答案 1 :(得分:1)
"新"是MenuItem的Text属性,而不是ContextMenu。
MenuItems还有事件处理程序,因此您可以在单击特定菜单项时运行一些代码。
答案 2 :(得分:0)
您可以这样做:
ContextMenu menuContainer = new ContextMenu();
var menuItem = new MenuItem("New");
menuItem.Click += Menu_Click;
menuContainer.Items.Add(menuItem);
该事件将被定义为:
void Menu_Click(object sender, RoutedEventArgs e)
{
//here comes your code
}
答案 3 :(得分:0)
从 ICommand 继承项目数据:
public class EscalateData : System.Windows.Input.ICommand
{
ITV.Misc.Msg m_react = null;
public void Execute(object parameter)
{
MessageBox.Show("Hello world!");
}
public event EventHandler CanExecuteChanged;
public bool CanExecute(object parameter)
{
return true;
}
public override string ToString()
{
return "Menu item";
}
然后填写上下文菜单:
ContextMenu GenerateContextMenu()
{
var ContextMenu = new ContextMenu();
var escalate = new MenuItem() { Header = "Main" };
List<EscalateData> data = new List<EscalateData>();
data.Add(new EscalateData());
data.Add(new EscalateData());
ContextMenu.Items.Add(escalate);
escalate.ItemsSource = data;
return ContextMenu;
}
答案 4 :(得分:0)
要将单击事件添加到菜单条上的菜单项,可以执行以下操作:
private void menuStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
{
string itemText = e.ClickedItem.Text;
switch (itemText)
{
case "menu name 1":
//do stuff
break;
case "menu name 2":
// do stuff
break;
}
}