mar*_*009 6 c# combobox right-click winforms
我有一个简单的下拉式ComboBox.当用户右键单击列表中的某个项目时,我想打开一个新窗口,但是在检测到右键单击时遇到问题.
我的代码:
private void cmbCardList_MouseClick(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right && cmbCardList.SelectedIndex != -1)
{
frmViewCard vc = new frmViewCard();
vc.updateCardDisplay(cmbCardList.SelectedItem);
vc.Show();
}
}
Run Code Online (Sandbox Code Playgroud)
如果我改变e.Button == MouseButtons.Left,整个事情就会发生.我有什么方法可以按照我的意愿使用它?
作为这个问题的一个墓志铭,您可以使用普通的.NET功能来完成这项工作; 你只需要深入了解事件调用堆栈.而不是处理MouseClick事件,处理MouseDown事件.我最近不得不做类似的事情,我只是覆盖了OnMouseDown方法,而不是附加一个处理程序.但是,处理程序也应该工作.这是代码:
protected override void OnMouseDown(MouseEventArgs e)
{
if (e.Button == MouseButtons.Right && !HandlingRightClick)
{
HandlingRightClick = true;
if (!cmsRightClickMenu.Visible)
cmsRightClickMenu.Show(this, e.Location);
else cmsRightClickMenu.Hide();
}
base.OnMouseDown(e);
}
protected override void OnMouseUp(MouseEventArgs e)
{
HandlingRightClick = false;
base.OnMouseUp(e);
}
private bool HandlingRightClick { get; set; }
Run Code Online (Sandbox Code Playgroud)
HandlingRightClick属性用于防止OnMouseDown逻辑的多个触发器; UI将发送多个MouseDown消息,这可能会干扰隐藏右键单击菜单.为了防止这种情况,我只在第一个MouseDown触发器上执行一次逻辑(逻辑很简单,我不在乎两个调用是否发生竞争,但你可能),然后忽略任何其他MouseDown触发器,直到发生MouseUp.它并不完美,但这样做可以满足您的需求.
| 归档时间: |
|
| 查看次数: |
6033 次 |
| 最近记录: |