6

システムトレイをベースにしたアプリケーションがあります。右クリックすると素晴らしいコンテキストメニューが表示されますが、左クリックすると別のコンテキストメニューが表示されます。今、私は別のメニューを表示させます

private void niTrayIcon_MouseClick(object sender, MouseEventArgs e)
{
    if (e.Button == System.Windows.Forms.MouseButtons.Left)
    {
        cmsTrayLeftClick.Show(Cursor.Position);
    }

}

これによりメニューは表示されますが、メニューをクリックしても消えることはありません。メニューを非表示にする唯一の方法は、アイテムをクリックするか、トレイアイコンをクリックすることです。

私もこのハックを思いついたが、それが正しい方法だと感じている。

private void niTrayIcon_MouseClick(object sender, MouseEventArgs e)
{
    if (e.Button == System.Windows.Forms.MouseButtons.Left)
    {
        niTrayIcon.ContextMenuStrip = cmsTrayLeftClick;
        MethodInfo mi = typeof(NotifyIcon).GetMethod("ShowContextMenu", BindingFlags.Instance | BindingFlags.NonPublic);
        mi.Invoke(niTrayIcon, null);
        niTrayIcon.ContextMenuStrip = cmsTrayRtClick;
    }
}

これは正しい方法ですか、それとももっとエレガントな方法がありますか?

4

1 に答える 1

7

他の誰も機能する方法を投稿していないので、正しい方法は次のとおりだと思います

private void niTrayIcon_MouseClick(object sender, MouseEventArgs e)
{
    if (e.Button == System.Windows.Forms.MouseButtons.Left)
    {
        niTrayIcon.ContextMenuStrip = cmsTrayLeftClick;
        MethodInfo mi = typeof(NotifyIcon).GetMethod("ShowContextMenu", BindingFlags.Instance | BindingFlags.NonPublic);
        mi.Invoke(niTrayIcon, null);
        niTrayIcon.ContextMenuStrip = cmsTrayRtClick;
    }
}
于 2010-09-23T21:27:01.607 に答える