2014-01-10 3 views
4

Я застрял с этим в течение некоторого времени. Я не могу открыть новую форму при нажатии кнопки. Если я создаю и .Show() форму в конструкторе начальной формы, я буду работать. Я не понимаю! :-(Form.Show(): Не удается получить доступ к объекту

StartUp Форма

public Form1() 
    { 
     InitializeComponent(); 
     startmessage(); 
     br = Logic.loadXML("theshiiiiiittt.xml"); 
     br2 = br.Clone(); 
     loadboxes(); 
     //serializeTest(); 
     t = new Thread(contactDBUpdate); 
     //t.IsBackground = true; 
     t.Start(); 

    } 

Кнопки событие:

private void resultButton_Click(object sender, EventArgs e) 
    { 
     ResultForm rf = new ResultForm(this); 
     rf.Show(); 
     this.Enabled = false; 
    } 

Надеется, что это достаточно

+0

Правильно ли срабатывает клик? Вы пытались помещать что-то вроде MessageBox.Show («Тест») в событие? – Gimly

+1

Не могли бы вы отправить трассировку стека? – Dennis

+0

Я попытался положить с помощью MessageBox, и я просто огню. Кнопка не проблема :( – Bjornen

ответ

1

Найдены проблемы с моим кодом. Я еще раз взглянул на трассировку стека и нашел сообщение «Значок».

  this.Icon.Dispose(); 

Startupform имел эту строку.

Этот код фиксированная моя проблема:

private void resultButton_Click(object sender, EventArgs e) 
{ 

    ResultForm rf = new ResultForm(this); 
    rf.Icon = this.Icon; 
    rf.Show(); 
    this.Enabled = false; 
} 

Спасибо для помощи рук ...

-1

Проблемы заключается в том, что ваш объекте формы теряет объем и утилизирована.. Если вы хотите, чтобы диалог был открытым, используйте Form.ShowDialog();

Попробуйте следующее:

private void resultButton_Click(object sender, EventArgs e) 
    { 
     using(ResultForm rf = new ResultForm(this)) 
     { 
      rf.ShowDialog(); 
     } 
     this.Enabled = false; 
    } 
+1

OP каждый раз создает новый экземпляр 'ResultForm'. Это не может быть причиной исключения. – Dennis

+0

Все еще не помогает. Получите ту же ошибку на rf.ShowDialog(); – Bjornen

+0

Опубликовать больше кодов PLS Или исключение stacktrace. –

4

В моем случае это было вызвано тем, что я хотел, чтобы мои формы покадрово. Поэтому я изменил их с form.ShowDialog(parentForm) на form.Show().

Но это вызвало ObjectDisposedException, если я попытаюсь показать форму второй раз, потому что где-то в коде был this.Close();. Form.Close также распоряжается им.

MSDN:

Когда форма закрыта, все ресурсы, созданные в пределах объекта являются закрыты и форма расположена.

мне просто нужно изменить

this.Close(); 

в

this.Hide(); 
+0

В случае множественного шоу и скрытия, не будет ли он потреблять больше памяти? – iJade

+0

Почему? Скрыть просто делает его невидимым и отображается видимым. –

0

Wile Реализация одноточечно узор на окнах формы я тоже получил эту ошибку. Решение состоит в том, что вы должны присвоить нулевое значение статической ссылки в

protected override void Dispose(bool disposing) 

, поставив простую линию.

obj=null; //obj is the static reference in the class. 
Смежные вопросы