如何停止显示默认上下文菜单的文本框?

时间:2012-10-31 16:23:54

标签: .net winforms textbox contextmenu

我注意到WinForm TextBox的Context Menu很奇怪。 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。

2 个答案:

答案 0 :(得分: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!");
}

答案 1 :(得分:1)

你可以尝试一件事:

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

void textBox1_MouseDown(object sender, MouseEventArgs e) {
  if (e.Button == MouseButtons.Right) {
    ReleaseCapture();
  }
}