none
Каким образом к ToolStripMenuItem в MenuStrip сделать привязку Help? RRS feed

  • Вопрос

  • Добрый день!

    Создал программу с MenuStrip. Теперь необходимо сделать привязку help.chm к каждому пункту меню - при нажатии на f1.

    KeyDown ни формы, ни MenuStrip - не работает. 

    Как предположение - придется делать наследника от MenuStrip или ToolStripMenuItem и наделять его свойствами.

    Только я в этом не очень силен.

    Помогите, если можете - желательно на visual basic, хотя - постараюсь разобраться в любом примере.

    • Перемещено Abolmasov Dmitry 27 января 2012 г. 11:29 (От:Языки программирования)
    8 декабря 2011 г. 1:32

Ответы

  • > попробовал, но не работает метод. Когда заходишь в меню - оно перехватывает ввод всех клавиш.

     
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication5
    {
        public partial class Form1 : Form
        {
            MenuStrip ms;
    
            public Form1()
            {
                ms = new MenuStrip { Parent = this };
                ms.Items.AddRange(new[] {
                        new ToolStripButton { Text = "test1" },
                        new ToolStripButton { Text = "test2" }
                    });
            }
    
            protected override bool ProcessDialogKey(Keys keyData)
            {
                if (keyData == Keys.F1)
                {
                    var itm = ms.GetItemAt(ms.PointToClient(Control.MousePosition));
                    System.Diagnostics.Trace.WriteLine(keyData + " " + itm);
                    return true;
                }
                return base.ProcessDialogKey(keyData);
            }
        }
    }
    
         
       
    • Помечено в качестве ответа Abolmasov Dmitry 19 декабря 2011 г. 22:40
    16 декабря 2011 г. 3:17

Все ответы

  • > необходимо сделать привязку help.chm к каждому пункту меню - при нажатии на f1.
     
     
    в форме надо определить ProcessDialogKey ...

    public partial class Form1 : Form
    {
        protected override bool ProcessDialogKey(Keys keyData)
        {
            if(keyData == Keys.F1)
            {
                // ...
                return true;
            }
            return base.ProcessDialogKey(keyData);
        }
    }
      
     
    8 декабря 2011 г. 3:37
  • Спасибо за ответ, попробовал, но не работает метод.

    Когда заходишь в меню - оно перехватывает ввод всех клавиш.

    16 декабря 2011 г. 1:54
  • > попробовал, но не работает метод. Когда заходишь в меню - оно перехватывает ввод всех клавиш.

     
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication5
    {
        public partial class Form1 : Form
        {
            MenuStrip ms;
    
            public Form1()
            {
                ms = new MenuStrip { Parent = this };
                ms.Items.AddRange(new[] {
                        new ToolStripButton { Text = "test1" },
                        new ToolStripButton { Text = "test2" }
                    });
            }
    
            protected override bool ProcessDialogKey(Keys keyData)
            {
                if (keyData == Keys.F1)
                {
                    var itm = ms.GetItemAt(ms.PointToClient(Control.MousePosition));
                    System.Diagnostics.Trace.WriteLine(keyData + " " + itm);
                    return true;
                }
                return base.ProcessDialogKey(keyData);
            }
        }
    }
    
         
       
    • Помечено в качестве ответа Abolmasov Dmitry 19 декабря 2011 г. 22:40
    16 декабря 2011 г. 3:17