#c#
#c#
Вопрос:
//MdiParent mainparent.cs public static void lodforweb() { frm_webcs frmload_webcs = новый frm_web { MdiParent = this }; frmload_webcs.Show(); } //Класс контекстного меню //Cl_contextmenu.cs public bool OnContextMenuCommand() { if (commandId == (2020) { mainparent.lodforweb(); вернуть true; } }
}
// возникла проблема с «этим» использованием статического метода
// создание экземпляра также не работает.
Комментарии:
1. Где
OnContextMenuCommand()
происходит? Это внутри существующего дочернего элемента MDI?2. OnContextMenuCommand находится в отдельных классах cl_contexmenu.cs
3. И это дочерняя форма Private void childform_Load(отправитель объекта, EventArgs e) { cl_chromebrowser urload = new cl_chromebrowser(); панель 1. Элементы управления. Добавить(urload.choniumeload(«www.site.com «)); urlload.chromebrowser. menuHandler= new cl_contexmenu(); } // как только я щелкаю правой кнопкой мыши всплывающие окна контекстного меню дочерней формы. Я хочу создать другую дочернюю форму и должен быть дочерним элементом mainparent
Ответ №1:
Из комментариев:
как только я щелкаю правой кнопкой мыши всплывающие окна контекстного меню дочерней формы. Я хочу создать другую дочернюю форму и должен быть дочерним элементом mainparent
Также предоставлено из комментариев:
private void childform_Load(object sender, EventArgs e) {
cl_chromebrowser urload = new cl_chromebrowser();
panel1.Controls.Add(urload.choniumeload("www.site.com"));
urload.chromebrowser.MenuHandler= new cl_contexmenu();
}
Итак, ваша дочерняя форма называется «дочерняя форма». Добавьте статический элемент, который содержит ссылку на родительский элемент MDI, и установите его в событии Load():
public static Form MyMdiParent;
private void childform_Load(object sender, EventArgs e)
{
// ... your existing code from above ...
childform.MyMdiParent = this.MdiParent;
}
Теперь вы можете использовать этот родительский элемент MDI непосредственно из вашего контекстного меню:
public bool OnContextMenuCommand()
{
if (commandId == 2020)
{
if (childform.MyMdiParent != null)
{
childform.MyMdiParent.Invoke((MethodInvoker)delegate ()
{
frm_webcs frmload_webcs = new frm_webcs();
frmload_webcs.MdiParent = childform.MyMdiParent;
frmload_webcs.Show();
});
}
}
return true;
}
Комментарии:
1. Спасибо, я действительно приветствую вашу помощь, но это выдает ошибку, contextmenu — это пользовательское контекстное меню .. drive.google.com/drive/folders / … предоставив вам ссылку, вы можете загрузить исходный formchild с пользовательским классом contextmenu Большое спасибо системе ошибок. Исключение InvalidOperationException: «Недопустимая операция между потоками: управление ‘mainparent’, доступ к которому осуществляется из потока, отличного от потока, в котором он был создан».
2. Попробуйте новую версию
OnContextMenuCommand
out.