DataGridView
当您右键单击特定列时,我有一个上下文菜单会打开。上下文菜单中显示的内容取决于单击的字段中的内容 - 多个文件的路径(对路径进行操作以创建正确文件的完整 UNC 路径)。
唯一的问题是我无法让点击工作。我没有从工具栏中拖放上下文菜单,而是以编程方式创建的。
我想如果我可以让路径(让我们称之为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();
}
}
我非常接近完成这项工作,因此非常感谢任何帮助。