2012-03-23 12 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

あなたのリストには常に1つの要素があり、最初のif文は決してヒットしません –

答えて

1

AのMenuItemは、通常、あなたがイベントをクリックして聞くのではなく、コマンドを呼び出すトリックを行う必要があります。

これが最近使用されたファイルリストであることを考えれば、私はそのコマンドが "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<>クラスを見てみましょう。

+0

+1 Queue Jetti

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 
} 
関連する問題