<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=133519&amp;view=findpost&amp;p=2875444</guid>
        <pubDate>Wed, 13 Apr 2011 20:24:16 +0000</pubDate>
        <title>Передача данных между формами</title>
        <link>https://forum.sources.ru/index.php?showtopic=133519&amp;view=findpost&amp;p=2875444</link>
        <description><![CDATA[deadonlyone: а не проще отдавать формам property (OtherForm as System.Windows.Forms) а потом приводить <br>как (OtherForm as System.Windows.Forms).RunSomeMethod ?]]></description>
        <author>deadonlyone</author>
        <category>.NET FAQ</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=133519&amp;view=findpost&amp;p=2427234</guid>
        <pubDate>Fri, 20 Nov 2009 15:35:53 +0000</pubDate>
        <title>Передача данных между формами</title>
        <link>https://forum.sources.ru/index.php?showtopic=133519&amp;view=findpost&amp;p=2427234</link>
        <description><![CDATA[gru34ik: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=133519&view=findpost&p=1022159'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>andrey &#064; <time class="tag-quote__quoted-time" datetime="2006-02-20T19:51:40+00:00">20.02.06, 19:51</time></span><div class='quote '>Вариант номер два: делаем конструктор дочерней формы с параметром:<br>
+Универсальность<br>
+Невозможность использования неправильным образом<br>
-Дополнительный член в классе<br>
-Нельзя использовать конструктор без параметров</div></div><br>
&quot;-Нельзя использовать конструктор без параметров&quot; - МОЖНО&#33; Конструктор можно перегрузить и создавать экземпляр как с параметрами, так и без них.]]></description>
        <author>gru34ik</author>
        <category>.NET FAQ</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=133519&amp;view=findpost&amp;p=1022159</guid>
        <pubDate>Mon, 20 Feb 2006 19:51:40 +0000</pubDate>
        <title>Передача данных между формами</title>
        <link>https://forum.sources.ru/index.php?showtopic=133519&amp;view=findpost&amp;p=1022159</link>
        <description><![CDATA[andrey: <span class='tag-size' data-value='14' style='font-size:14pt;'>Передача данных из создающей формы</span> тривиальна - надо просто сохранять ссылку на ребёнка, то есть<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Form f=new Form();//вот этот f и надо где-нибудь сохранить пока его надо использовать</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
<br>
Естественно свойства/контролы/функции ребёнка к которым нужно обращаться надо делать public или internal<br>
<br>
<span class='tag-size' data-value='14' style='font-size:14pt;'>В обратную сторону</span> всё немного сложнее, но опять же ничего сверхестественного<br>
<br>
<strong class='tag-b'>Вариант номер раз:</strong> используем Form.MdiParent:<br>
+Ничего дополнительно писать не надо<br>
-Только для MDI приложений<br>
-Нельзя использовать родителя в конструкторе ребёнка<br>
-Exception если MdiParent не того типа что подразумевается<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">public class ParentForm:Form{</div><div class="code_line">//.......</div><div class="code_line">public Label label;</div><div class="code_line">//.......</div><div class="code_line">public void SomeFunction(){</div><div class="code_line">ChildForm cf=new ChildForm();</div><div class="code_line">cf.MdiParent=this;</div><div class="code_line">cf.Show();</div><div class="code_line">}</div><div class="code_line">//.......</div><div class="code_line">}</div><div class="code_line">//.......</div><div class="code_line">public class ChildForm:Form{</div><div class="code_line">//.......</div><div class="code_line">private void AnotherFunction(){</div><div class="code_line">((ParentForm)MdiParent).label.Text=&quot;Matrix has you!&quot;;</div><div class="code_line">}</div><div class="code_line">//.......</div><div class="code_line">}</div></ol></div></div></div></div><br>
<br>
<strong class='tag-b'>Вариант номер два:</strong> делаем конструктор дочерней формы с параметром:<br>
+Универсальность<br>
+Невозможность использования неправильным образом<br>
-Дополнительный член в классе<br>
-Нельзя использовать конструктор без параметров<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">public class ParentForm:Form{</div><div class="code_line">//.......</div><div class="code_line">public Label label;</div><div class="code_line">//.......</div><div class="code_line">public void SomeFunction(){</div><div class="code_line">ChildForm cf=new ChildForm(this);</div><div class="code_line">cf.Show();</div><div class="code_line">}</div><div class="code_line">//.......</div><div class="code_line">}</div><div class="code_line">//.......</div><div class="code_line">public class ChildForm:Form{</div><div class="code_line">//.......</div><div class="code_line">//Здесь храним ссылку на родителя</div><div class="code_line">private ParentForm parent;</div><div class="code_line">public ChildForm(ParentForm p){</div><div class="code_line">parent=p;</div><div class="code_line">}</div><div class="code_line">//.......</div><div class="code_line">private void AnotherFunction(){</div><div class="code_line">parent.label.Text=&quot;Matrix has you!&quot;;</div><div class="code_line">}</div><div class="code_line">//.......</div><div class="code_line">}</div></ol></div></div></div></div><br>
<br>
<strong class='tag-b'>Вариант номер три:</strong> делаем открытый член в дочерней форме:<br>
+Универсальность<br>
-Дополнительный член в классе<br>
-Не особо &quot;красивое&quot; решение, хотя кого это волнует :)<br>
-Нельзя использовать родителя в конструкторе<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">public class ParentForm:Form{</div><div class="code_line">//.......</div><div class="code_line">public Label label;</div><div class="code_line">//.......</div><div class="code_line">public void SomeFunction(){</div><div class="code_line">ChildForm cf=new ChildForm();</div><div class="code_line">cf.parent=this;</div><div class="code_line">cf.Show();</div><div class="code_line">}</div><div class="code_line">//.......</div><div class="code_line">}</div><div class="code_line">//.......</div><div class="code_line">public class ChildForm:Form{</div><div class="code_line">//.......</div><div class="code_line">//Здесь храним ссылку на родителя</div><div class="code_line">public ParentForm parent;</div><div class="code_line">//.......</div><div class="code_line">private void AnotherFunction(){</div><div class="code_line">parent.label.Text=&quot;Matrix has you!&quot;;</div><div class="code_line">}</div><div class="code_line">//.......</div><div class="code_line">}</div></ol></div></div></div></div><br>
<br>
<strong class='tag-b'>Вариант номер четыре:</strong> используем паттерн &quot;singleton&quot;<br>
+Универсальность<br>
+Невозможность использования неправильным образом<br>
+Использование паттерна проектирования :)<br>
-Дополнительный член в классе<br>
-Нельзя создавать несколько родителей<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">public class ParentForm:Form{</div><div class="code_line">//.......</div><div class="code_line">//Единственный экземпляр формы. Естественно его надо инициализзировать</div><div class="code_line">public static ParentForm Instance;</div><div class="code_line">//Варианты инициализации:</div><div class="code_line">//1 - при создании</div><div class="code_line">public static void Main(){</div><div class="code_line">Application.Run(ParentForm.Instance=new ParentForm());</div><div class="code_line">}</div><div class="code_line">//2 - в конструкторе</div><div class="code_line">public ParentForm(){</div><div class="code_line">ParentForm.Instance=this;</div><div class="code_line">//.......</div><div class="code_line">}</div><div class="code_line">//3 - в статическом конструкторе</div><div class="code_line">static ParentForm(){</div><div class="code_line">Instance=new ParentForm();</div><div class="code_line">//В этос варианте больше нигде нельзя делать new ParentForm</div><div class="code_line">//Например в Main надо написать:</div><div class="code_line">// Application.Run(ParentForm.Instance);</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">//.......</div><div class="code_line">public Label label;</div><div class="code_line">//.......</div><div class="code_line">public void SomeFunction(){</div><div class="code_line">ChildForm cf=new ChildForm();</div><div class="code_line">cf.Show();</div><div class="code_line">}</div><div class="code_line">//.......</div><div class="code_line">}</div><div class="code_line">//.......</div><div class="code_line">public class ChildForm:Form{</div><div class="code_line">//.......</div><div class="code_line">private void AnotherFunction(){</div><div class="code_line">ParentForm.Instance.label.Text=&quot;Matrix has you!&quot;;</div><div class="code_line">}</div><div class="code_line">//.......</div><div class="code_line">}</div></ol></div></div></div></div><br>
<br>
<br>
Естественно во всех случаях не забываем о модификаторах доступа, иначе компилятор напомнит]]></description>
        <author>andrey</author>
        <category>.NET FAQ</category>
      </item>
	
      </channel>
      </rss>
	