Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > Доступ к элементам родительской формы


Автор: AlexC 22.5.2006, 18:11
Всем привет!
Я еще только начинаю осваивать С#, поэтому сильно не пинайте smile 

Есть главная форма. у нее описываю такое свойство:

    public int asd=1;

Также на этой форме есть список, при клике на который открывается модальное диалоговое окно.
В функции прорисовки диалога пишу такое:

try{
    MessageBox.Show(((MainForm)this.ParentForm).asd.ToString());
} catch(Exception ex){
    MessageBox.Show( ex.Message );
}

И у меня вылетает исключение с текстом: Object reference not set to an instance of an object

В чем моя проблема? Подскажите, пожалуйста как это исправить.

P.S. Если это важно, использую SharpDevelop 2.0 

Автор: Softaz 22.5.2006, 19:21
Код

            frm_viewkvarthome frm_tc = (frm_viewkvarthome)Application.OpenForms["frm_viewkvarthome"];
            frm_tc.SetTab(index);


Это я из главной формы (FormMain) вызвал функцию из frm_viewkvarthome.
Хотя это и не правильно (если углубляться), но для первого раза пойдет.
P.S.: .NET 2.0 

Автор: -ser- 23.5.2006, 03:17
он же хочет чтобы ты в конструкторе класса модального диалогового окна передал инстанс головной формы.
Код

//в вызываемом классе 
private FormMain formMain;

public MyModalDialog( FormMain form )
{
    InitializeComponent();    

    formMain = form;    
}
...
formMain.asd = ...

а в главной при вызове ставишь this
Код

myModalDialog.ShowDialog( this ) 


полазил бы по этому форуму, вопрос-то стандартный. 

Автор: AlexC 23.5.2006, 19:46
Большое спасибо! Все заработало. Правда SharpDevelop как и раньше выдает предупреждение, что будет исключение, но его нет smile 

Цитата

а в главной при вызове ставишь this
Код

myModalDialog.ShowDialog( this ) 


Только передавать его надо при вызове конструктора smile 

Цитата

полазил бы по этому форуму, вопрос-то стандартный.

Я полазил по MSDN, нашел http://msdn.microsoft.com/library/rus/default.asp?url=/library/rus/vbcon/html/vbtskgettinginformationfromdialogboxsparentform.asp и сделал как там написано. 

Автор: -ser- 24.5.2006, 05:22

а вот здесь тогда необходимо уточнить. если так как в MSDN, 

ParentForm, похоже, только для случаев когда родительская форма является MdiContainer'oм. может это как раз твой случай. тогда при вызове второй, нам надо будет указать 
Код

form2.MdiParent = this;

более того, в этом случае она не может быть модальной, т.е. form2.ShowDialog() здесь не сработает. 


 

Автор: AlexC 24.5.2006, 15:17
Может оно и так. Но там ничего не сказано об этом, статья эта находится в разделе про диалоги, а MDI дальше идет.  

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)