Возможно ли, чтобы вместо ContextMenuStrip из NotifyIcon отображалась форма, которая будет вести себя как ContextMenuStrip?

Я хочу заменить ContextMenuStrip из NotifyIcon с некоторыми более сложными Form, Я могу отобразить форму, когда пользователь нажимает на NotifyIcon в SystemTray, но не могу скрыть / закрыть форму, например ContextMenuStrip, закрыть, когда пользователь щелкает где-то еще.

Это возможно?

Вот пример кода, я показываю эту форму следующим образом:

private void Mouse_Up_Event(object sender, MouseEventArgs e)
{  
    FormMenu f = new FormMenu();
    f.StartPosition = System.Windows.Forms.FormStartPosition.Manual;
    f.SetDesktopLocation(Cursor.Position.X - f.Width / 2,
        Cursor.Position.Y - f.Height - 20);
    f.Show();
    f.Focus();
}

А также FormMenu это сложная форма с панелями и несколькими кнопками.

1 ответ

Решение

Вы можете разместить свой комплексный элемент управления или форму в ContextMenuStrip с помощью ToolStripControlHost,

Код:

var c= new MyUserControl();
//Set up properties and events then add it to context menu
this.contextMenuStrip1.Items.Add(new ToolStripControlHost(c));

Вы также можете добавить свою форму в контекстное меню следующим образом:

var f = new YourForm() { 
    TopLevel = false, 
    FormBorderStyle = System.Windows.Forms.FormBorderStyle.None, 
    MinimumSize= new Size(200, 200), /*Your preferred size*/
    Visible=true
};
//Set up properties and events then add it to context menu
this.contextMenuStrip1.Items.Add(new ToolStripControlHost(f) );

Скриншот:

введите описание изображения здесь

На скриншоте выше я добавил форму в полосу контекстного меню, в которой нет других элементов, и установил ShowImageMargin свойство контекстного меню для false,

Вы также можете иметь другие элементы и подменю.

Другие вопросы по тегам