Возможно ли, чтобы вместо 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
,
Вы также можете иметь другие элементы и подменю.