如何将click事件添加到新添加的菜单项?以下是我到目前为止所做的事情。显然我的方式非常业余,所以什么可能是更好的方式?
Collection<string> recent_cases = new Collection<string>();
recent_cases.Insert(0, System.IO.Path.GetFileNameWithoutExtension(ofd.FileName));
if (recent_cases.Count == 6)
{
recent_cases.RemoveAt(5);
}
for (int i = 0; i < recent_cases.Count; ++i)
{
MenuItem_OpenRecent.Items.Add(recent_cases[i]);
}
答案 0 :(得分:1)
MenuItem通常调用Command而不是让你听点击事件。
鉴于这是最近使用的文件列表,我假设该命令将是“Open File”或类似的东西,并且该命令已经存在。
如果用户选择最近使用的文件,您将需要调用此命令,但另外提供文件名作为命令参数。
所以:
void OnNewFilenameAdded(string filename)
{
var item = new MenuItem();
item.Command = _OpenFileCommand;
item.Header = filename;
item.CommandParameter = filename;
MenuItem_OpenRecent.Items.Insert(0, item);
if (MenuItem_OpenRecent.Items.Count == 6)
MenuItem_OpenRecent.Items.RemoveAt(5);
}
如果你真的想保留一个单独的文件名集合,比如你要用MVVM实现它,那么看一下Queue<>
类。
答案 1 :(得分:0)
沿着这些方向的东西应该可以解决问题
for (int i = 0; i < recent_cases.Count; ++i)
{
var mi= new MenuItem();
mi.Header = recent_cases[i];
mi.Click += new EventHandler(MenuItem_Click);
MenuItem_OpenRecent.Items.Add(mi);
}
....
void MenuItem_Click(object sender, EventArgs e)
{
var mi= sender as MenuItem;
//Do stuff with your file
}