右键单击发生的 datagridview 单元格附近不显示上下文菜单
Context menu not displaying near datagridview cell where right click occurred
上下文菜单弹出窗口有点问题。
我有一个 datagridview,我希望用户能够右键单击一个单元格并显示上下文菜单。用户可以多 select 个连续或非连续的单元格。右键单击并获得上下文菜单。我已经通读了堆栈溢出问题并尝试了这些建议,none 对我有用。上下文菜单不会显示在 selected 单元格附近。
我正在对 datagridview cellmouse down 事件进行编码并检查鼠标右键。这是我的代码:
if (e.Button == MouseButtons.Right)
{
ContextMenu m = new ContextMenu();
MenuItem mi = new MenuItem("Set Online");
mi.Click += setOnlineItemCell_Click;
m.MenuItems.Add(mi);
MenuItem mi2 = new MenuItem("Set Offline");
mi2.Click += setOfflineItemCell_Click;
m.MenuItems.Add(mi2);
m.Show(machineGrid, new Point(e.X, e.Y));
}
我不能只将一个参数传递给 Show 方法,因为它抱怨找不到它(即使 MSDN 说你可以)。
如果您能帮助我们在单元格附近显示上下文菜单,我们将不胜感激。
C#,Visual Studio 2015 专业版,.NET 4.5.2
让上下文菜单显示在最后一个“选定”单元格的旁边是可行的;但是,它不会非常用户友好。在大多数情况下,当用户“右键单击”某个内容时,上下文菜单应该出现在用户“右键单击”时鼠标“指针”所在的“下方”。您所描述的是将上下文菜单“远离”鼠标“箭头”所在的位置。我相信大多数用户不会期待这一点。
我从您 post 编辑的内容中猜测...用户在网格中选择多个单元格,然后用户“右键单击”网格中的某处。这将显示一个上下文菜单(在鼠标下方,而不是将菜单移动到某个选定的单元格)。上下文菜单将显示“OffLine/OnLine”菜单项。然后在用户选择“Online/Offline”之后,一些方法会使用网格中“选择”的单元格作为数据来设置单元格在线或离线。这是我能从你的问题中解读出来的。
为了提供帮助,以下是一些建议。 post中的最后一行代码....
m.Show(machineGrid, new Point(e.X, e.Y));
以上行将上下文菜单移动到使用 UI 坐标的网格 X、Y 值。这似乎与“选择”了哪些单元格无关。然而,这会将上下文菜单移动到用户右键单击上方的某个位置……迫使用户“追逐”上下文菜单。
最后,我质疑使用“CellMouseDown”事件来执行此上下文菜单逻辑。 DataGridView
有自己的“ContextMenuStrip”,您可以对其进行设置。使用 DataGridView’s
ContextMenuStrip
可能是一种更简单的方法。下面是使用 ContextMenuStrip
设置名为 dgv_PlayerPool
的 DataGridView
的示例。
private void SetContexMenu() {
ContextMenuStrip cms = new ContextMenuStrip();
cms.Items.Add("Set OnLine", null, setOnline_Click);
cms.Items.Add("Set OffLine", null, setOffline_Click);
dgv_PlayerPool.ContextMenuStrip = cms;
}
项目在上面添加一行,接受一个字符串显示在菜单中,一个图像,最后一个点击时调用的事件。
用户选择上下文菜单项时触发的事件。
private void setOffline_Click(object sender, EventArgs e) {
MessageBox.Show("SetOffLine");
}
private void setOnline_Click(object sender, EventArgs e) {
MessageBox.Show("SetOnLine");
}
希望这是有道理的。
上下文菜单弹出窗口有点问题。 我有一个 datagridview,我希望用户能够右键单击一个单元格并显示上下文菜单。用户可以多 select 个连续或非连续的单元格。右键单击并获得上下文菜单。我已经通读了堆栈溢出问题并尝试了这些建议,none 对我有用。上下文菜单不会显示在 selected 单元格附近。
我正在对 datagridview cellmouse down 事件进行编码并检查鼠标右键。这是我的代码:
if (e.Button == MouseButtons.Right)
{
ContextMenu m = new ContextMenu();
MenuItem mi = new MenuItem("Set Online");
mi.Click += setOnlineItemCell_Click;
m.MenuItems.Add(mi);
MenuItem mi2 = new MenuItem("Set Offline");
mi2.Click += setOfflineItemCell_Click;
m.MenuItems.Add(mi2);
m.Show(machineGrid, new Point(e.X, e.Y));
}
我不能只将一个参数传递给 Show 方法,因为它抱怨找不到它(即使 MSDN 说你可以)。
如果您能帮助我们在单元格附近显示上下文菜单,我们将不胜感激。
C#,Visual Studio 2015 专业版,.NET 4.5.2
让上下文菜单显示在最后一个“选定”单元格的旁边是可行的;但是,它不会非常用户友好。在大多数情况下,当用户“右键单击”某个内容时,上下文菜单应该出现在用户“右键单击”时鼠标“指针”所在的“下方”。您所描述的是将上下文菜单“远离”鼠标“箭头”所在的位置。我相信大多数用户不会期待这一点。
我从您 post 编辑的内容中猜测...用户在网格中选择多个单元格,然后用户“右键单击”网格中的某处。这将显示一个上下文菜单(在鼠标下方,而不是将菜单移动到某个选定的单元格)。上下文菜单将显示“OffLine/OnLine”菜单项。然后在用户选择“Online/Offline”之后,一些方法会使用网格中“选择”的单元格作为数据来设置单元格在线或离线。这是我能从你的问题中解读出来的。
为了提供帮助,以下是一些建议。 post中的最后一行代码....
m.Show(machineGrid, new Point(e.X, e.Y));
以上行将上下文菜单移动到使用 UI 坐标的网格 X、Y 值。这似乎与“选择”了哪些单元格无关。然而,这会将上下文菜单移动到用户右键单击上方的某个位置……迫使用户“追逐”上下文菜单。
最后,我质疑使用“CellMouseDown”事件来执行此上下文菜单逻辑。 DataGridView
有自己的“ContextMenuStrip”,您可以对其进行设置。使用 DataGridView’s
ContextMenuStrip
可能是一种更简单的方法。下面是使用 ContextMenuStrip
设置名为 dgv_PlayerPool
的 DataGridView
的示例。
private void SetContexMenu() {
ContextMenuStrip cms = new ContextMenuStrip();
cms.Items.Add("Set OnLine", null, setOnline_Click);
cms.Items.Add("Set OffLine", null, setOffline_Click);
dgv_PlayerPool.ContextMenuStrip = cms;
}
项目在上面添加一行,接受一个字符串显示在菜单中,一个图像,最后一个点击时调用的事件。
用户选择上下文菜单项时触发的事件。
private void setOffline_Click(object sender, EventArgs e) {
MessageBox.Show("SetOffLine");
}
private void setOnline_Click(object sender, EventArgs e) {
MessageBox.Show("SetOnLine");
}
希望这是有道理的。