3

我注意到 WinForm 文本框的上下文菜单有些奇怪。TextBox 控件有一个默认的上下文菜单,其中包含剪切、复制、粘贴和其他一些功能。我正在尝试用我自己的菜单替换此菜单。我创建了一个简单的测试应用程序,其中包含一个表单和一个表单上的文本框,并添加了以下代码:

Form1()
{
    InitilizeComponent();
    ContextMenu menu = new ContextMenu();
    menu.MenuItems.Add("Hello World", HelloWorld_Clicked);
    textBox1.ContextMenu = menu;
}

private void HelloWorld_Clicked(object sender, EventArgs e)
{
    MessageBox.Show("Hello World!");
}

当我运行它时,我可以通过右键单击文本框然后释放鼠标按钮而不移动鼠标来显示我的上下文菜单。但是,如果我在文本框上按下鼠标右键,按住它,然后将鼠标移到文本框外,最后松开鼠标按钮,我会得到默认的文本框上下文菜单。

有可能阻止它这样做吗?

更新:如果系统运行在 Windows XP Pro SP3 和 .Net 3.5 上会有所不同。

4

2 回答 2

1

您可以尝试一件事:

[DllImport("user32.dll")]
public static extern bool ReleaseCapture();

void textBox1_MouseDown(object sender, MouseEventArgs e) {
  if (e.Button == MouseButtons.Right) {
    ReleaseCapture();
  }
}
于 2012-10-31T17:29:45.443 回答
1

我怀疑在文本框外释放鼠标按钮会打开表单的上下文菜单而不是文本框。我没有测试过,这只是一个猜测。您也可以使用这样的代码为表单设置上下文菜单,但我自己没有尝试过:

Form1()
{
    InitilizeComponent();
    ContextMenu menu = new ContextMenu();
    menu.MenuItems.Add("Hello World", HelloWorld_Clicked);
    textBox1.ContextMenu = menu;
    this.ContextMenu = menu;
}

private void HelloWorld_Clicked(object sender, EventArgs e)
{
    MessageBox.Show("Hello World!");
}
于 2012-10-31T16:27:29.620 回答