gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 02:10:36 24 4
gpt4 key购买 nike

我注意到 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com