dポイントプレゼントキャンペーン実施中!

C#3.5を使用しています。

TreeViewのContestMenuStripのToolStripMenuItemをクリックしたときに
どの(複数のノードに同じContestMenuStripをセットしています)TreeViewのノードからのToolStripMenuItemが
クリックされたかを知るためにEventArgs e からTreeViewの選択されてるノードが取得したいのですが、
どうすれば良いのでしょうか?

private void itemAddToolStripMenuItem_Click(object sender, EventArgs e)
{
var ev = (System.Windows.Forms.ToolStripItemEventArgs)e;// ToolStripItemEventArgsにキャストすればよいかと思ったのですがエラーになります・・・
}

A 回答 (1件)

 こんにちは。



 ToolStripItemEventArgsはItemAddedイベントからくるものなので、型が合わないのではないでしょうか。
 http://msdn.microsoft.com/ja-jp/library/system.w …

 取り合えず、ツリービューのClickイベント辺りで、コンテキストストリップを開く際、Tagメンバにツリービューのオブジェクトを入れて、コンテキストストリップのItemClickedイベントで取り出して見ると言うのは如何でしょう。

//ツリービューのClickイベント
private void treeView1_Click(object sender, EventArgs e)
{
MouseEventArgs mea = (MouseEventArgs)e;
if (mea.Button != MouseButtons.Right)
return;

TreeView treeView = (TreeView)sender;

//Tagにツリービューのオブジェクトを入れる
this.contextMenuStrip1.Tag = treeView;

//コンテキストストリップを表示
this.contextMenuStrip1.Show(treeView, mea.Location);
}

//コンテキストストリップのItemClickedイベント
private void contextMenuStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
{
ContextMenuStrip cms = (ContextMenuStrip)sender;

//先程記録しておいたツリービューのオブジェクトを取り出す
TreeView treeView = (TreeView)cms.Tag;

//ツリービューに選択されているノードが無ければ引き返す
if (treeView.SelectedNode == null)
return;

//選択されているノード名を表示する
MessageBox.Show(treeView.SelectedNode.Name);
}
    • good
    • 0
この回答へのお礼

ご返答ありがとうございます。
なるほど、まずツリービューのイベントでTagにセットするわけですね。
そのやり方でできました。ありがとうございます。

お礼日時:2009/08/17 02:40

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!