2015-06-04 2 views
0

У меня есть кнопка в форме1, которая открывает форму2. Я делаю это, используя frm2.show(). Он работает совершенно нормально в первый раз, что я открываю frm2, но когда я закрываю frm2 и нажмите на кнопку в frm1, чтобы открыть frm2 снова, я получаю эту ошибку:Открытие второй формы более одного раза ошибка

enter image description here

Может кто-нибудь сказать мне, как реши это?

Edit: У меня есть модуль, где у меня есть мое подключение к базе данных и мое заявление для форм:

Public frmGame As New Game 
Public frmPlay As New Play 
Public frmFinish As New GameFinish 
Public frmLogin As New Login 
Public frmManage As New Manage 
Public frmInsert As New Toevoegen 

Где я открываю форму является только при нажатии на кнопку в Form1.

+2

Возможно, вы хотите опубликовать код, показывающий, как каждая форма инициализируется и где вы показываете и закрываете форму2. – RianBattle

+0

Эти объявления не обязательно должны быть 'New' в этот момент – Plutonix

ответ

3

Звучит для меня как будто вы Close() ing frm2. Закрытие формы должно распоряжаться ею и освобождать ее ресурсы, поэтому вы не можете просто Show() снова. Вместо этого вам нужно создать новый экземпляр объекта, например:

frm2=new Form2() 
frm2.Show() 

Если это не работает (возможно, потому что вы не хотите, чтобы повторно инициализировать элементы данных формы), вы можете использовать Hide(), а не Close(), чтобы временно скрыть форму во время выполнения вашей программы.

Если вам нужно, чтобы предотвратить форму от закрытия с помощью кнопки X, вы можете сделать это с несколькими различными способами:

  1. Самым лучшим путем может быть, чтобы скрыть или отключить кнопку закрытия , Читайте на This post, чтобы лучше понять, как это сделать.

  2. Вы можете использовать событие FormClosing, либо изнутри frm2, либо из главного окна. Установите свойство Cancel на объект FormClosingEventArgs, который будет передан. Проблема здесь в том, что вам нужно будет предоставить дополнительный код для закрытия формы, когда вы действительно хотите, чтобы она закрылась. Свойство CloseReason объекта FormClosingEventArgs должно дать вам способ правильно справиться с этим. Излишне говорить, что это, вероятно, самый рискованный способ сделать что-то, потому что вам нужно закрыть это окно, когда приложение отключится, но вы также намеренно блокируете это.

  3. Вы можете поймать событие FormClosed в форме, которая порождает frm2, а затем создать новый экземпляр окна. Опять же, вам нужно будет указать путь к коду, чтобы окно закрывалось, когда приложение завершается.

В целом метод 1, вероятно, является самым безопасным. Вы можете закрыть окно с помощью .Close(), когда приложение отключится, но пользователь не может закрыть его с помощью кнопки X.

+0

Сэр, но когда вторая форма закрывается (FormClosed-event), я не могу сказать, как frm2.hide(), я имею в виду, как я могу скрыть форму, которая была закрыто пользователем? .. –

+0

поймать событие формообразования и скрыть его – RianBattle

Смежные вопросы