我想更改默认文本框上下文菜单,所以我创建了自己的菜单,我就这样分配了它
texbox.ContextMenu = myContextMenu
但是我不知道如何恢复默认文本框菜单(在运行时)。我需要myContextMenu才能显示当我用鼠标右键单击文本框时(按住控制按钮)。在其他情况下,我需要显示默认文本框上下文菜单。 有可能??
答案 0 :(得分:2)
以下是Microsoft提供的示例:
http://msdn.microsoft.com/en-us/library/ms750420.aspx
对于记录,以下是使用WinForms执行此操作的方法:
public partial class TextBoxContextMenuDemo : Form
{
ContextMenu mnuContextDefault;
ContextMenu mnuContextAlt;
MenuItem mnuItmAltMenuTest;
public TextBoxContextMenuDemo()
{
InitializeComponent();
InitializeAltContextMenu();
}
private void InitializeAltContextMenu()
{
mnuContextDefault = new ContextMenu();
mnuContextDefault = this.TextBox1.ContextMenu;
mnuItmAltMenuTest = new MenuItem();
mnuItmAltMenuTest.Index = -1;
mnuItmAltMenuTest.Text = "Test Menu Item";
mnuItmAltMenuTest.Click += new System.EventHandler(this.mnuItmAltMenuTest_Click);
mnuContextAlt = new ContextMenu();
mnuContextAlt.MenuItems.Add(mnuItmAltMenuTest);
}
private void TextBox1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
if ((Control.ModifierKeys == Keys.Control))
{
this.TextBox1.ContextMenu = mnuContextAlt;
TextBox1.ContextMenu.Show(TextBox1, new Point(e.X, e.Y));
}
else
{
this.TextBox1.ContextMenu = mnuContextDefault;
}
}
}
private void mnuItmAltMenuTest_Click(object sender, System.EventArgs e)
{
MessageBox.Show("You clicked the alternate test menu item!");
}
}
HTH!
答案 1 :(得分:0)
实际上比起初看起来更难。我相信默认的上下文菜单是控件的实际模板的一部分。
如果您只想剪切/复制/粘贴,最简单的方法是创建第二个实现这些选项的ContextMenu。如果这样做,您可以使用内置的ApplicationCommands来实现功能,还可以自动本地化此ContextMenu。
答案 2 :(得分:0)
您可以将ContextMenu-Property设置为null。 OnContextMenuOpening事件也可以帮助您。