2015-09-09 3 views
0

Решение найдено здесь: How can I customize the system menu of a Windows Form?. В любом случае, спасибо за вашу помощь :)







Я хочу, чтобы добавить новый элемент ContextMenu по умолчанию формы, которая появляется при нажатии правой нажал на верхней панели (где минимизировать окно и максимизировать окно находятся).Как добавить элементы в/изменить формы по умолчанию contextmenu

Я также предпочитаю к ней программно (не в конструкторе)

Я попробовал этот

public Form1() 
{ 
    InitializeComponent(); 
    this.ContextMenu.Add(new MenuItem("Test")); //->NullReferenceException 
    this.ContextMenu = new ContextMenu(/*..*/); //-> Not what I want 
} 

, что приводит к NullReferenceException. , если я установил this.ContextMenu, это влияет только на контекстное меню, которое появляется, когда вы щелкните правой кнопкой мыши в форму, которая мне не нужна в этом случае.

Я надеюсь, что кто-то может помочь мне ^^ Я знаю, что это должно быть возможно как-то, так как я видел его в большом количестве программ уже

+1

вы должны показать здесь больше кода, чтобы мы могли увидеть, где проблема. Возможно, вы используете this.ContextMenu в неправильном месте, пожалуйста, покажите свой код. – Jack1987

+0

@ Jack1987 Я отредактировал его;) – Stefan

ответ

0

Вот один пример от Microsoft:

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

Спасибо за быстрый ответ :) Я протестировал его, но он не работает для меня. Он выбрасывает исключение NullReferenceException в 'mnuContextDefault = this.ContextMenu;', что на самом деле является моей проблемой. Как мне это получить? Например, если вы щелкните правой кнопкой мыши в левом верхнем углу формы – Stefan

0
+0

К сожалению, это также влияет только на Contextmenu, когда я нажимаю правой кнопкой мыши форму. Я редактировал свой вопрос, я нашел решение, которое подходит :) – Stefan

Смежные вопросы