Могу ли я привязать несколько элементов в ContextMenuStrip к одной и той же функции? - PullRequest
0 голосов
/ 02 октября 2019

Я сделал ContextMenuStrip, который заполняется Элементами, если некоторые объекты в форме видны или нет.

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

Некоторый код:

private void AddMenuItems(){
    ContextMenuStrip c = new ContextMenuStrip();
    if (extension.Equals("sty") || extension.Equals("st2") || extension.Equals("sst")) {
        this.fileExtension = "style";
        c.Items.Add("Style files (c/u)");
    }    
    if (extension.Equals("txt")){
        this.fileExtension = "text";
        c.Items.Add("Text files (c/u)");
    }
    // some other ifs
    // I've tried this, but only the last one is registered
    foreach(ToolStripMenuItem m in c.Items){
        m.Click += CheckSelectedType;
    }
}

private void CheckSelectedType(object sender, EventsArgs e){
    switch(this.fileExtension){
        case "style":
            // do something
            break;
        case "text":
            // do something
            break;
    }
}

1 Ответ

0 голосов
/ 02 октября 2019

Вы можете написать это:

private ContextMenuStrip CreateContextMenuStrip(string extension)
{
  var result = new ContextMenuStrip();
  if ( extension.Equals("sty") || extension.Equals("st2") || extension.Equals("sst") )
  {
    var item = result.Items.Add("Style files (c/u)");
    item.Tag = "style";
    item.Click += ContextMenuItem_Click;
  }
  else
  if ( extension.Equals("txt") )
  {
    var item = result.Items.Add("Text files (c/u)");
    item.Tag = "text";
    item.Click += ContextMenuItem_Click;
  }
  return result;
}

private void ContextMenuItem_Click(object sender, EventArgs e)
{
  switch ( (string)( (ToolStripItem)sender ).Tag )
  {
    case "style":
      // ...
      break;
    case "text":
      // ...
      break;
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...