- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我想在右键单击 DataGridView 时放置一个上下文相关菜单。我想要从单击的单元格的内容中派生出一个菜单项,并从数据库中检索子菜单中的可变数量的项目。
我通过在 ContextMenuStrip Opening 事件中构建 ToolStripMenuItem 来实现这一点。它起作用了——几乎……
如果我不显示子菜单,这样用户必须单击顶层菜单中的单个项目,一切都很好,但是如果我调用 ShowDropDown 方法自动显示子菜单,则不会在项目出现时触发被点击。
这是我可以生成的最简单的代码来重现问题 - 我已经提取了对 DataGridView 和数据库的所有引用,因此我的“动态”菜单绝对是静态的;-)
如果您将其设为表单定义,请右键单击表单上的任意位置,您将看到有效但并非所需的行为 - 单击子菜单项并看到弹出窗口。勾选复选框并再次右键单击,您会看到子菜单自动飞出 - 但单击项目不会触发 aliasClick 处理程序。
有什么想法吗?在这个特定的应用程序中,我可以编写一个完全可维护的解决方法,避免使用 ShowDropDown - 但我想知道我做错了什么,以防将来需要使用它。
public partial class Form1 : Form
{
private ContextMenuStrip cms;
private CheckBox chkAuto;
public Form1()
{
InitializeComponent();
chkAuto = new CheckBox();
Controls.Add(chkAuto);
cms = new ContextMenuStrip();
cms.Opening += contextMenuStrip1_Opening;
this.MouseClick += Form1_MouseClick;
}
private void Form1_MouseClick(object sender, MouseEventArgs e)
{
if (e.Button == System.Windows.Forms.MouseButtons.Right)
cms.Show(Cursor.Position);
}
private void contextMenuStrip1_Opening(object sender, CancelEventArgs e)
{
cms.Items.Clear();
ToolStripMenuItem tsmi = new ToolStripMenuItem("Title from datagridviewcell");
tsmi.DropDownItems.Add(new ToolStripMenuItem("First item from database lookup", null, aliasClick));
tsmi.DropDownItems.Add(new ToolStripMenuItem("Second item from database lookup", null, aliasClick));
tsmi.DropDownItems.Add(new ToolStripMenuItem("Last item from database lookup", null, aliasClick));
cms.Items.Add(tsmi);
if (chkAuto.Checked)
tsmi.ShowDropDown();
e.Cancel = false;
}
private void aliasClick(object sender, EventArgs e)
{
ToolStripMenuItem clickedItem = (ToolStripMenuItem)sender;
MessageBox.Show(clickedItem.Text);
}
}
最佳答案
我不完全确定如何着手证明这一点,但我怀疑您对 tsmi.ShowDropDown()
的调用以某种方式导致点击处理程序无法正确捕获坐标。将其替换为 cms.Show(MousePosition)
即可。
也许从坐标中收集到一些有用的信息...
var mi = new ToolStripMenuItem("First item from database lookup", null, aliasClick);
tsmi.DropDownItems.Add(mi);
var mi2 = new ToolStripMenuItem("Second item from database lookup", null, aliasClick);
tsmi.DropDownItems.Add(mi2);
var mi3 = new ToolStripMenuItem("Last item from database lookup", null, aliasClick);
tsmi.DropDownItems.Add(mi3);
cms.Items.Add(tsmi);
if (chkAuto.Checked)
tsmi.ShowDropDown();
//cms.Show(MousePosition);
Debug.WriteLine(mi.Bounds.ToString());
关于c# - ToolStripMenuItem ShowDropDown - 事件未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45029454/
我正在尝试为 ContextMenuStrip 中的 ToolStripMenuItems 设置更大的垂直填充。但是,更改 Padding.Top 属性会在底部而不是顶部添加填充。 我还尝试为 Too
有没有办法让 ToolStripMenuItem 在我单击子控件(在其 DropDrowItems 集合中)时不关闭? 在我的例子中,我有一些用作复选框的 ToolStripMenuItems。实际上
在我的 Windows 应用程序中,我有一个带有网格的上下文菜单,问题是我想根据用户权限禁用上下文菜单中的 ToolStripMenuItem。我该怎么做。我已经这样做了,但它不起作用 private
我已将 menuStrip1 项的可见属性设置为 false 为 foreach (ToolStripMenuItem itm in menuStrip1.Items) { itm.Visib
我有一个很大的实体列表,用户需要能够从中进行选择。我的窗口上有一个 ContextMenuStrip,每个类别的实体都有一些 MenuItems。 在图书馆的例子中,想想“员工”、“可借阅者”、“赞助
我在运行时在该 strip 中有一个 ContextMenuStrip 我正在添加一个 ToolStripMenuItem。我在 XtraGridView 的 MouseDown() 事件处理程序中添
我有一个使用 ContextMenuStrip 的 C# winForm 项目。我根据使用交互动态地将 ToolStripMenuItems 添加到 ContextMenuStrip。当我添加一个新的
sqlstr = "select ModuleName,ModuleId,pagename from modules WHERE ParentID='" + parentID + "' AND VIs
例如标签和文本框。 我试过: class MyClass : ToolStripPanel { //... } 等等。但是然后: contextMenuStrip1.Items.Add(n
我正在使用 MenuStrip有两个主要ToolStripMenuItems ,其中每一个都有其“下拉菜单”,其中包含更多具有 CheckOnClick 的 ToolStripMenuItems属性设
我正在尝试找出是否有调用 ToolStripMenuItem 的方法。 例如,我在返回结果时调用 Web 服务(异步)。我根据结果填充下拉项,(在回调方法中) ToolStripMenuItem.D
我有一个每次打开时都会动态填充的下拉菜单,这是执行此操作的逻辑: private void joysticksToolStripMenuItem_DropDownOpening(object send
我的 menuStrip 中的一个 ToolStripMenuItem 包含我可以选择隐藏/取消隐藏的表的所有列 DropDown每次我想这样做时重新打开下拉菜单(单击该项目)。是否有允许此菜单在从中
我试图让我的上下文菜单保留在屏幕上,即使在我单击其中一个下拉项后(当按下 Shift 键时,尽管我认为这对问题并不重要)。当您单击“开始”>“所有程序”>“附件”> [现在按 Shift 键] 并单击
我正在 MenuStrip 中自定义绘制菜单项。我遇到的问题是菜单项坚持根据文本调整自身大小,这不是我想要的(没有文本)。我可以将 AutoSize 设置为 false 并显式指定大小,但包含菜单 (
在 WinForms .Net 2.0 应用程序中,我想创建一个带有 ToolStripMenuItem 的上下文菜单,该菜单项本身具有标签和文本框。我正在谈论的示例可以在 Access 中找到 -
我有一个主要通过 NotifyIcon 的 ContextMenuStrip 操作的应用程序 ToolStripMenuItems 有多个级别,用户可以通过它们。 问题是,当用户有两个屏幕时,Menu
我有一个带有自定义渲染器的菜单: menuMain.Renderer = new ToolStripProfessionalRenderer(new MenuColors()); 有没有办法在将鼠标移
我有一个带有 MenuStrip 的应用程序,每次我将鼠标悬停在 MenuItem 上时,它都会突出显示为蓝色。 我曾尝试更改 BackColor 和 ForeColor,但这不是问题所在。 有没有办
我有我的 ToolStripMenuItem,当我运行该应用程序时,它看起来像这样: 如您所见,ToolStripMenuItem 左边有一点空白。 如何删除它?我试图编辑每个属性,但它仍然存在...
我是一名优秀的程序员,十分优秀!