Bonifats
@Bonifats
Начинающий программист

Как обратиться к уже открытой форме?

Добрый день!

Господа знатоки, в очередной раз прошу совета. Ситуация кратко: приложение из двух форм. В главной форме веб-браузер.
Необходимо, чтобы, при закрытии второй формы, браузер добавлял код js. Как добавить - я знаю. Но не могу добиться того, чтобы это совершалось в момент закрытия второй формы.

Кусок кода:

private void Keyboard_FormClosing(object sender, FormClosingEventArgs e)
{
Program.frm1 = ;
Program.frm1.webKitBrowser.StringByEvaluatingJavaScriptFromString("");
}

Собственно, вторая строчка в событии Closing и должна добавлять скрипт. Но она не работает без первой строчки. А с первой строчкой следующее: если я напишу Program.frm1 = new Form1(), то во время работы программы при попытке закрыть мою Keyboard_Form, вылезет следующее сообщение:
"В результате вызова компонента COM возвращена ошибка в формате HRESULT E_FAIL."

Подозреваю, что нужно сослаться на УЖЕ открытую главную форму. Но как? Гуглю уже полдня.
  • Вопрос задан
  • 903 просмотра
Пригласить эксперта
Ответы на вопрос 3
AnnTHony
@AnnTHony
Интроверт
Тут смотрели?
Или здесь.
Поди Google сломался у вас.
Ответ написан
Я так понял главная форма не закрывается, закрывается вторая форма которая создается позднее.
Это значит что вы это делаете из главной формы.
Вам нужно добавить в конструктор второй формы аргумент который принимает (Form form).
И когда создаете вторую форму, то передавайте ей ссылку на главную так Form2 form2 = new Form2(this);

Во второй форме заведите закрытое поле, с которым и будет работать как с ссылкой на главную форму.

Form _mainForm;

Form2( Form form ) //Конструктор второй формы.
{
  if (form == null)
  {
    throw new ArgumentNullException("form");
  }

  this._mainForm = form;
}
Ответ написан
Комментировать
@carbon88
.NET developer/ORM developer
Все просто. Любое событие принимает объект, который вызвал срабатывание события и некоторые аргументы. Вам нужно что-то типа вот такого
private void Keyboard_FormClosing(object sender, FormClosingEventArgs e)
{
  var closingForm = sender as Form1;// пытаемся преобразовать к Form1
  if (closingForm!=null)//если sender это объект класса Form1 или его наследника
      closingForm.webKitBrowser.StringByEvaluatingJavaScriptFromString("");
  // sender не объект класса Form1 или его наследника
}


Ну вот как-то так
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы