我在ContextMenuStrip中有"添加","删除"和"更新"等选项,当用户右键单击ListView时会弹出这些选项.
如果列表视图中没有项目,如何禁用"更新"菜单?
我有一个 DataGridView。当右键单击 DataGridView 第 4 列中的单元格时,我创建了一个 ContextMenuStrip。然而,我陷入困境,因为在左侧单击 ContextMenuStrip 菜单项时,我希望从右键单击的单元格中提取数据。
我想要的单元格位于 ContextMenuStrip 的左上角,这正是我右键单击并指向我想要抓取的数据的单元格的位置。 屏幕抓取不显示鼠标光标。
这是我到目前为止所拥有的:
GridView1.MouseDown += new MouseEventHandler(this.dataGridView_MouseDown);
private void dataGridView_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
var ht = dataGridView1.HitTest(e.X, e.Y);
//Checks for correct column index
if (ht.ColumnIndex == 4 && ht.RowIndex != -1)
{
//Create the ContextStripMenu for Creating the PO Sub Form
ContextMenuStrip Menu = new ContextMenuStrip();
ToolStripMenuItem MenuOpenPO = new ToolStripMenuItem("Open PO");
MenuOpenPO.MouseDown += new MouseEventHandler(MenuOpenPO_Click);
Menu.Items.AddRange(new ToolStripItem[] { MenuOpenPO });
//Assign created …
Run Code Online (Sandbox Code Playgroud) 当他们从上下文菜单条中单击子菜单项(颜色>红色)时,我试图更改按钮的颜色。
该代码附加到用户定义的按钮数量。为了弄清楚他们试图更改哪个按钮,我尝试从子项目转到源代码管理,如下所示:发送者>所有者工具条>所有者菜单>源代码管理。
我的代码:
private void redToolStripMenuItem_Click(object sender, EventArgs e)
{
var subItem = sender as ToolStripItem;
if (subItem == null)
return;
var mainItem = subItem.OwnerItem as ToolStripItem;
if (mainItem == null)
return;
var menuStrip = mainItem.Owner as ContextMenuStrip;
if (menuStrip == null)
return;
var dataGridView = menuStrip.SourceControl as DataGridView;
if (dataGridView == null)
return; //null here
MessageBox.Show(dataGridView.Name);
}
Run Code Online (Sandbox Code Playgroud)
根据我在谷歌上发现的信息,这似乎是一个错误。有没有解决方法?
我有一个上下文菜单条带有8个项目和两个分隔符.当用户调出上下文菜单条时,然后按箭头键滚动项目,点击第八项使菜单"向上滚动",在底部留下空白区域.有没有办法阻止这种行为?
用户右键单击DGV中的单元格,然后在ContextMenuStrip中进行选择.基于他们的CMS选择,我想做点什么(复制,隐藏,过滤).我的问题是识别右键单击的单元格.
我试图使用以下方法处理此方案,但无法引用[ColumnIndex].
private void cmsDataGridView_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
{
switch (e.ClickedItem.Text)
{
case "Copy":
break;
case "Filter On":
break;
case "Hide Column":
DataGridViewBand band = dataGridView1.Columns[e.ColumnIndex];
band.Visible = false;
break;
}
}
Run Code Online (Sandbox Code Playgroud)
我应该用两种不同的方法吗?一个处理鼠标点击(然后我可以捕获DGV列索引),然后从那里,我调用CMS项目点击事件?
谢谢你的帮助,Brian.
适合我的代码.哦,我必须从设计器中的dataGridView的ContextMenuStrip属性中删除cmsDataGridView方法.离开那里会引起问题.
// Identify the cell clicked for cmsDataGridView
DataGridViewCell clickedCell;
private void dataGridView1_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
try
{
if (e.Button == MouseButtons.Right)
{
dataGridView1.ClearSelection();
clickedCell = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex];
clickedCell.Selected = true;
cmsDataGridView.Show(dataGridView1, e.Location);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message + Environment.NewLine + ex.StackTrace);
}
} …
Run Code Online (Sandbox Code Playgroud) 我有一个ContextMenuStrip
显示可由用户命名的项目; 允许用户提供包含&符号的项目名称.当ContextMenuStrip
显示时,项目'将&符号视为转义序列,并为下一个字符加下划线.
在设置项目Text
成员之前,我可以将所有&符号加倍,但该成员在代码中的其他地方使用,所以如果可能的话,我想停止ContextMenuStrip特别处理&符号.有没有办法扭转这种行为?
我有一个包含许多项目的 ContextMenuStrip。
如何处理鼠标滚轮滚动项目?
我在网上搜索,但没有找到有用的。
或者如何从上下文菜单中获取第一个/最后一个显示/可见的项目?
我想将相同的ContextMenuStrip分配给表单上的所有ListViewItems.这些ListViewItems是动态创建的.
不幸的是,似乎ListViewItems没有可以分配的ContextMenuStrip属性(当然,ListView本身也是如此).
我是否必须将ContextMenuStrip分配给ListView,然后根据ListView当前选择的项目从那里开始?
我有标准的datagridview,我有contextmenustrip.我的问题是当用户单击鼠标右键而不是每行时我需要显示这个contextmenustrip!只在我选择的行上.我试过这个:
dataGridView1.Rows[1].ContextMenuStrip = contextMenuStrip1;
Run Code Online (Sandbox Code Playgroud)
但它不起作用.
我正在尝试NotifyIcon
显示一个上下文菜单,即使用鼠标左键单击它也是如此.我可以在图标的MouseDown
事件中将其显示在正确的位置:
sysTrayIcon.ContextMenuStrip = TrayContextMenu
If e.Button = MouseButtons.Left Then TrayContextMenu.Show()
Run Code Online (Sandbox Code Playgroud)
但是因为sysTrayIcon
当我左键单击时未指定为控件,如果我在菜单外单击或按下转义,则不会从屏幕上清除.
我知道通常的方法是使用菜单的重载Show(control, location)
方法,但这引发了这个错误:
Value of type 'System.Windows.Forms.NotifyIcon' cannot be converted to 'System.Windows.Forms.Control'.
Run Code Online (Sandbox Code Playgroud)
那么如何将菜单附加到通知图标呢?
contextmenustrip ×10
c# ×9
winforms ×4
datagridview ×3
.net ×2
listview ×1
listviewitem ×1
mousewheel ×1
notifyicon ×1
vb.net ×1