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

标签 .net winforms textbox contextmenu

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

Form1()
{
    InitailizeComponent();
    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:我在 Windows 11 上的 .Net Core 6 中使用以下代码再次尝试此操作,但遇到了同样的问题。

namespace WinFormsApp1;

public partial class Form1 : Form
{
    public Form1()
    {
        this.InitializeComponent();
        ContextMenuStrip menu = new ContextMenuStrip();
        menu.Items.Add("Hello World", null, HelloWorld_Clicked);
        textBox1.ContextMenuStrip = menu;
    }

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

考虑到 MS 现在已经开始使用 GitHub 我提出了一个 issue那里。

最佳答案

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

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!");
}

关于.net - 如何停止显示默认上下文菜单的文本框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13162460/

相关文章:

c# - 按句点将字符串格式化为 3 位数字组

winforms - 网格编辑与详细表单编辑 - 最终用户有多聪明?

c# - TextBox:TextChanged 事件 - 输入 x 个字符时自动验证

javascript - 如何获取焦点文本框的 id?

.net - STA线程模式线程也会阻塞winform UI线程?

python - 从 wxPython 中的 wxSlider 实时更新的不可编辑文本框

c# - 如何使用 ServiceThrottling 调整 WCF 服务以获得更好的性能

.net - GAC 的位置在哪里?

c# - CSV 文件中的字符串问题

winforms - 如何防止 TabControl 中 UserControl 的延迟加载?