как вызвать метод или функцию внутри MDI main parent Мне нужно создать экземпляр формы в классе и новом родительском экземпляре shoud mainparent?

#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.