2012-03-23 50 views
2

如何将点击事件添加到新添加的菜单项?以下是我迄今为止所做的。显然,我的方式非常业余,所以可能是更好的方法?添加到“打开最近的文件”

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

您的列表将始终只有一个元素,并且从未击中队列<>建议的第一条if语句 – 2012-03-23 13:06:52

回答

1

一个菜单项通常调用命令,而不是你听单击事件。

鉴于这是一个最近使用过的文件列表,我假设该命令将是“打开文件”或类似的东西,并且该命令已经存在。

如果用户选择一个最近使用的文件,您将需要调用此相同的命令,但另外提供文件名作为命令参数。

所以:

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<>类。

+0

+1 – Jetti 2012-03-23 13:37:59

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 
} 
相关问题