Проверьте если событие пункта меню, произойдя из щелчка или короткого пути

Там должен так или иначе проверить, прибывает ли событие пункта меню из щелчка в меню или от нажимаемого ключа короткого пути?

Я попытался добавить обработчики событий к нажатию клавиши и ключу вниз события, однако эти события "не запускаются", когда это - горячая клавиша, это нажало (Они работают как ожидалось, когда это не горячая клавиша). Я ничего не мог найти в объекте отправителя, который отличался между щелчком меню или более легким щелчком.

0
nl ja de
Только из любопытства, what' s пункт дифференцирующегося щелчка от ключевого короткого пути?
добавлено автор ken2k, источник
Я могу спросить, почему вам нужна такая функциональность? Обычно I' d говорят, что не должно быть никакого различия между щелчком мыши или нажатием клавиши, это - одна задача Пункта меню к резюме от этого.
добавлено автор Desty, источник
У одного компьютера есть проблема где it' s по-видимому беспорядочно вводный форма в применении that' s связанный с ключом F3. Мое подозрение то, что computer' s клавиатура посылает ключ. Однако с тех пор есть горстка способов открыть форму (Щелчок меню, короткий путь, снижение вниз "недавно открытых" форм или просто закрытия формы на вершине и возвращении к нему), и проблемы никогда не происходило когда I' m вокруг я can' t проверяют проблему. Таким образом, я хотел зарегистрироваться, когда ключ F3 нажимался, и посмотрите, соответствовал ли он, когда проблема подходит.
добавлено автор GraeningM, источник

4 ответы

Можно поймать все ключевые комбинации, отвергнув ProcessCmdKey:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
{
    if (keyData == (Keys.Control | Keys.F)) 
    {
        Console.WriteLine("My code ran from shortcut");
        myFunction();
    }
    return base.ProcessCmdKey(ref msg, keyData);
}

private void ToolStripMenuItem_click(object sender ...)
{
  Console.WriteLine("My code ran from menu item");
  myFunction();
}

void myFunction()
{
  //your functionality here
}
1
добавлено
Спасибо, ProcessCmdKey - то, что я хотел. Только отметить, это если it' s щелчок меню или shotcut ключ событие ToolStripMenuItem_Click будет поднятым.
добавлено автор GraeningM, источник

Хорошо, чтобы получить помощь, необходимо отправить то, что вы попробовали. (Ваш источник)

Можно использовать enum для этого:

enum Sender
{
    Shortcut,
    Menu
}

void MenuEvent(Sender sender)
{
    if (sender == Sender.Shortcut)
    {

    }
    else
    {

    }
}

//if you click from the menu
void btnMenuClick()
{
    MenuEvent(Sender.Menu);
}

//if you use shortcut
void OnShortcutEvent()
{
    MenuEvent(Sender.Shortcut);
}

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

1
добавлено
чтобы сказать вас истинное, я не понимаю вашего решения
добавлено автор platon, источник
I' m не уверенный, которые кодируют вас, хотят, что I' m использующий, чтобы создать меню? Я могу добавить его, но it' s значительно более сложный, чем потребность быть с тех пор it' s создание меню на основе информации держал в базе данных, таким образом, мы можем управлять, кто добирается что пункты меню. Ядро довольно просто, просто пункт меню с коротким путем и событием на по щелчку пункта меню
добавлено автор GraeningM, источник
@platon I' m жаль я надеюсь его ясное теперь, сообщаю мне! Но OP мог также быть немного более ясным также.
добавлено автор joell, источник
@GraeningM Вы могли опубликовать код, что вызывает событие? По крайней мере, для короткого пути могло быть возможно приспособить это решение, и если не, что один можно принять, это было из меню.
добавлено автор joell, источник

Я вижу, что единое решение этой проблемы - отвергает метод ProcessCmdKey ToolStripMenuItem, который поднят, когда короткий путь обрабатывается. В этом случае можно определить, когда щелчок был вызван коротким путем. Очевидно, необходимо использовать собственный класс ToolstripMenuItem вместо стандартного.

0
добавлено

Обращайтесь с Событием mouseDown, чтобы обработать ваш щелчок мыши.

menuItem. MouseDown + = новый MouseEventHandler (Process_Mouse_Click_Handler);

Обращайтесь с событием Щелчка, чтобы обработать ваш короткий путь.

menuItem. Щелкните + = новый EventHandler (Process_Shortcut_Handler);

0
добавлено
Если вы идете этот маршрут (и i' m не защищающий вас делают), тогда, необходимо обращаться с мышью событие вместо этого.
добавлено автор BitsEvolved, источник
Microsoft Stack Jobs
Microsoft Stack Jobs
1 788 участник(ов)

Work & freelance only Microsoft Stack. Feed https://t.me/Microsoftstackjobsfeed Чат про F#: @Fsharp_chat Чат про C#: @CSharpChat Чат про Xamarin: @xamarin_russia Чат общения:@dotnettalks

Microsoft Developer Community Chat
Microsoft Developer Community Chat
584 участник(ов)

Чат для разработчиков и системных администраторов Microsoft Developer Community. __________ Новостной канал: @msdevru __________ Баним за: оскорбления, мат, рекламу, флуд, флейм, спам, NSFW контент, а также большое количество оффтоп тем. @banofbot