我有一個DataGridView
和右鍵單擊特定列時打開的上下文菜單。 上下文菜單中顯示的內容取決於單擊的字段中的內容 - 多個文件的路徑(操縱路徑以創建到正確文件的完整UNC路徑)。如何創建動態構建的上下文菜單clickEvent
唯一的問題是我無法獲得點擊工作。 我沒有從工具欄中拖放上下文菜單,我以編程方式創建它。
我想,如果我能得到的路徑(姑且稱之爲ContextMenuChosen
)在MessageBox.Show(ContextMenuChosen);
露面我可以在相同的設置System.Diagnostics.Process.Start(ContextMenuChosen);
的Mydgv_MouseUp事件低於實際工作的地步,我可以得到它當選擇了上下文菜單中的某些內容時,請將其關閉MessageBox.Show("foo!");
,但這是結束的地方。我在下面的一些評論中留下了一些評論,顯示了我點擊了其中一條路徑後所嘗試的內容。一些導致空字符串,其他錯誤(對象未設置爲實例...)。
我昨天整天搜索了代碼,但找不到另一種方法來連接動態構建的上下文菜單clickEvent。
代碼和註釋:
ContextMenu m = new ContextMenu();
// SHOW THE RIGHT CLICK MENU
private void Mydgv_MouseClick(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
int currentMouseOverCol = Mydgv.HitTest(e.X, e.Y).ColumnIndex;
int currentMouseOverRow = Mydgv.HitTest(e.X, e.Y).RowIndex;
if (currentMouseOverRow >= 0 && currentMouseOverCol == 6)
{
string[] paths = myPaths.Split(';');
foreach (string path in paths)
{
string UNCPath = "\\\\1.1.1.1\\c$\\MyPath\\";
string FilePath = path.Replace("c:\\MyPath\\", @"");
m.MenuItems.Add(new MenuItem(UNCPath + FilePath));
}
}
m.Show(Mydgv, new Point(e.X, e.Y));
}
}
// SELECTING SOMETHING IN THE RIGHT CLICK MENU
private void Mydgv_MouseUp(object sender, MouseEventArgs e)
{
DataGridView.HitTestInfo hitTestInfo;
if (e.Button == MouseButtons.Right)
{
hitTestInfo = Mydgv.HitTest(e.X, e.Y);
// If column is first column
if (hitTestInfo.Type == DataGridViewHitTestType.Cell && hitTestInfo.ColumnIndex == 6)
{
//MessageBox.Show(m.ToString());
////MessageBox.Show(m.Tag.ToString());
//MessageBox.Show(m.Name.ToString());
//MessageBox.Show(m.MenuItems.ToString());
////MessageBox.Show(m.MdiListItem.ToString());
// MessageBox.Show(m.Name);
//if (m.MenuItems.Count > 0)
//MessageBox.Show(m.MdiListItem.Text);
//MessageBox.Show(m.ToString());
//MessageBox.Show(m.MenuItems.ToString());
//Mydgv.ContextMenu.Show(m.Name.ToString());
//MessageBox.Show(ContextMenu.ToString());
//MessageBox.Show(ContextMenu.MenuItems.ToString());
//MenuItem.text
//MessageBox.Show(this.ContextMenu.MenuItems.ToString());
}
m.MenuItems.Clear();
}
}
我很接近完成此所以任何幫助,將不勝感激。
LarsTech,它的工作萬無一失了,非常感謝。 – Chris
menu_click函數需要返回一個'EventHandler'嗎? – sparkyShorts
@sparkyShorts不,事件會映射到方法。在這種情況下,每次在菜單項上生成單擊時,都會將click事件映射爲運行menu_Click方法。 'mi.Click + = menu_Click;'是'mi.Click + = new EventHandler(menu_Click)'的簡稱;' – LarsTech