Передача данных между формами - PullRequest
0 голосов
/ 27 декабря 2008

у меня следующий сценарий У меня есть основная форма, как MDI родительская и MDI дочерняя форма, дочерняя форма показывает новую форму (я назвал ее mydialog). Я хочу получить доступ к определенной функции в дочерней форме MDI из mydialog, поэтому я попытался установить свойство Owner в объекте mydialog, но произошло исключение (исключение циклической ссылки), а свойства Parent и ParentForm формы mydialog равны нулю, я быстро и dirty soluion, используя свойство Tag mydialog. Я ищу лучшее решение и почему есть исключение, когда я устанавливаю свойство Owner mydialog

Ответы [ 6 ]

1 голос
/ 27 декабря 2008

поэтому я попытался установить свойство Owner в объекте mydialog, но произошло исключение (исключение циклической ссылки)

Не должно быть никаких исключений при установке свойства Owner. Можете ли вы вставить исключение? Также не могли бы вы вставить свой код, который устанавливает это значение? Вы установили другие свойства, такие как MDIParent / etc?

РЕДАКТИРОВАТЬ: обновление кода

Попробуйте следующее, оно должно работать

groupsettingsform mydialog= new groupsettingsform(); //create dialog 
mydialog.Owner= this; //set owner MDI child form 
mydialog.ShowDialog(); // <== DO NOT PASS THE OWNER
0 голосов
/ 27 декабря 2008

Я предпочитаю передавать любые пользовательские данные или параметры в форму ее конструктором. Это наименее специфичный для WinForms способ, и на самом деле он ничем не отличается от построения в основном любого другого объекта.

В других случаях мне нравится устанавливать свойства в Форме. Похоже, это соглашение WinForms.

Это лучше, чем использовать тег или «вытягивать» данные от владельца. Поскольку оба они требуют явного приведения и, следовательно, не особенно элегантны.

0 голосов
/ 27 декабря 2008

Мой простой ответ до сих пор - использовать свойство Tag, но я думаю, что есть лучший способ

groupsettingsform mydialog = new groupsettingsform (); mydialog.Tag = это; mydialog.ShowDialog (это);

0 голосов
/ 27 декабря 2008

Установка владельца не должна выдавать исключение ... Попробуйте это в вашей форме MyDialog

((YourMDIChildForm)Owner).YourMDIChildFormMethod();
0 голосов
/ 27 декабря 2008

вы можете создать параметризованный конструктор в MyDialog как

public MyDialog(object param1)

передать ваши данные как

MyDialog frm = new MyDialog("data");
frm.ShowDialog();

или создайте публичное свойство в MyDialog как

public object Data {get; set;}

и установите это при создании экземпляра вашего диалога

MyDialog frm = new MyDialog (); frm.Data = "ваши данные здесь"; frm.ShowDialog ();

НТН,

0 голосов
/ 27 декабря 2008

Можете ли вы показать нам код, который вы использовали для отображения диалогового окна. Один из методов ShowDialog принимает родительский объект в качестве параметра, который может делать то, что вы ищете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...