<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://www.dotnetzone.gr:443/cs/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Πρώτα Βήματα - Desktop Applications</title><link>https://www.dotnetzone.gr:443/cs/forums/80/ShowForum.aspx</link><description>Θέματα για όσους φτιάχνουν τα πρώτα τους Desktop Applications σε .NET Framework</description><dc:language>el</dc:language><generator>CommunityServer 2.1 SP3 (Build: 20423.1)</generator><item><title>Απ: Επικοινωνία μεταξύ User Controls and Forms</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/51312.aspx</link><pubDate>Thu, 04 Jun 2009 19:26:34 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:51312</guid><dc:creator>bigN</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/51312.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=80&amp;PostID=51312</wfw:commentRss><description>&lt;BLOCKQUOTE&gt;&lt;div&gt;&lt;img src="http://www.dotnetzone.gr/cs/Themes/default/images/icon-quote.gif"&gt; &lt;strong&gt;panagiotis_georgiadis:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="background:white none repeat scroll 0% 0%;font-family:Courier New;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:black;font-size:10pt;"&gt;&lt;font face="Tahoma"&gt;Σκέψου για λίγο πώς θα μπορούσε κανείς να έχει προγραμματίσει τον Internet Explorer/ Firefox. Κάθε καινούριο Tab που προσθέτεις σημαίνει ότι γίνεται κάτι παρόμοιο με το παραπάνω παράδειγμα. Μια διαφορά είναι ότι αντί για ένα UserControl member, o Explorer θα είχε ένα &lt;font face="Courier New"&gt;List&amp;lt;UserControl&amp;gt; m_lstTabs&lt;/font&gt;, όπου καλεί την Add/Remove.&lt;/font&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;br&gt;&lt;br&gt;Σχετικα με την τελευταία παρατήρησή σου θα ήθελα να σε ρωτήσω το εξής :&lt;br&gt;Από τη στιγμή που όλα τα controls βρίσκονται στο &lt;font face="Tahoma"&gt;&lt;font face="Courier New"&gt;List&amp;lt;UserControl&amp;gt; m_lstTabs επομένως δεν γίνονται disposed() άρα και η κατανάλωση πόρων αυξάνεται με το άνοιγμα περισσότερων καρτελών. &lt;/font&gt;&lt;/font&gt;&lt;br&gt;Πως θα μπορούσαν να αλληλεπιδράσουν τα controls &lt;font face="Tahoma"&gt;&lt;font face="Courier New"&gt;μεταξύ τους π.χ με τα events?&lt;/font&gt;&lt;/font&gt; &lt;br&gt;&lt;br&gt;</description></item><item><title>Απ: Επικοινωνία μεταξύ User Controls and Forms</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/51013.aspx</link><pubDate>Wed, 27 May 2009 17:45:43 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:51013</guid><dc:creator>bigN</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/51013.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=80&amp;PostID=51013</wfw:commentRss><description>&lt;BLOCKQUOTE&gt;&lt;div&gt;&lt;img src="http://www.dotnetzone.gr/cs/Themes/default/images/icon-quote.gif"&gt; &lt;strong&gt;panagiotis_georgiadis:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="background:white none repeat scroll 0% 0%;font-family:Courier New;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:black;font-size:10pt;"&gt;&lt;p style="margin:0px;"&gt;&lt;font face="Tahoma"&gt; Πέραν του ότι έτσι χαλάει η εντροπία του σύμπαντος και θα πέσει ο ουρανός στα κεφάλια μας, όλα αυτά τα αντικείμενα κάθονται στη μνήμη και την ξοδεύουν άσκοπα. Το panel1 έχει ένα ControlCollection στο οποίο μπορείς άνετα να κάνεις Add() όπως δείχνω, και Remove() όταν δεν το χρειάζεσαι.&lt;/font&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;font face="Tahoma"&gt;Αν και δεν είμαι απόλυτα σίγουρος, το Remove() θα θέσει αυτόματα το αντικείμενο σε Disposable state, οπότε στην επόμενη γύρα ο σκουπιδιάρης (GarbageCollector) θα το συμμαζέψει. Για σιγουριά (εγώ ή εσύ ο ίδιος) πρέπει να τρέξω π.χ. το πρόγραμμα σε Debug mode βήμα-βήμα και να βλέπω το GDI Object count στον TaskManager.&lt;/font&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;font face="Tahoma"&gt;Σκέψου για λίγο πώς θα μπορούσε κανείς να έχει προγραμματίσει τον Internet Explorer/ Firefox. Κάθε καινούριο Tab που προσθέτεις σημαίνει ότι γίνεται κάτι παρόμοιο με το παραπάνω παράδειγμα. Μια διαφορά είναι ότι αντί για ένα UserControl member, o Explorer θα είχε ένα &lt;font face="Courier New"&gt;List&amp;lt;UserControl&amp;gt; m_lstTabs&lt;/font&gt;, όπου καλεί την Add/Remove.&lt;/font&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;br&gt;&lt;br&gt;Ήταν ακριβώς αυτό που έψαχνα, μου άρεσε ο τρόπος προσέγγισής σου ( με το m_myActiveControl ) .... σε ευχαριστώ φίλε.....&lt;br&gt;θα συμπληρωσω το παράδειγμα σου με το event handler και είμαι ok:).&lt;br&gt;</description></item><item><title>Απ: Επικοινωνία μεταξύ User Controls and Forms</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/51007.aspx</link><pubDate>Wed, 27 May 2009 08:19:51 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:51007</guid><dc:creator>panagiotis_georgiadis</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/51007.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=80&amp;PostID=51007</wfw:commentRss><description>&lt;P&gt;Έτσι στα πεταχτά σου δείχνω ένα παράδειγμα του τι μπορεί να σημαίνει ενεργό UserControl. Όλα στο παράδειγμα είναι στατικά και χωρίς interfaces.&lt;/P&gt;
&lt;P&gt;Α) η μαμά φόρμα&lt;/P&gt;
&lt;P&gt;(Γραφικά, φαντάσου 2 κουμπιά αριστερά και ένα άδειο panel δεξιά)&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="COLOR:blue;"&gt;namespace&lt;/SPAN&gt; MultiCustomControlChooser&lt;/P&gt;
&lt;DIV style="FONT-FAMILY:Courier New;BACKGROUND:white;COLOR:black;FONT-SIZE:10pt;"&gt;
&lt;P style="MARGIN:0px;"&gt;{&lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR:blue;"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR:blue;"&gt;partial&lt;/SPAN&gt; &lt;SPAN style="COLOR:blue;"&gt;class&lt;/SPAN&gt; &lt;SPAN style="COLOR:#2b91af;"&gt;MainForm&lt;/SPAN&gt; : &lt;SPAN style="COLOR:#2b91af;"&gt;Form&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR:blue;"&gt;public&lt;/SPAN&gt; MainForm()&lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; InitializeComponent();&lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR:blue;"&gt;private&lt;/SPAN&gt; &lt;SPAN style="COLOR:#2b91af;"&gt;UserControl&lt;/SPAN&gt; m_myActiveControl = &lt;SPAN style="COLOR:blue;"&gt;null&lt;/SPAN&gt;;&lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR:blue;"&gt;private&lt;/SPAN&gt; &lt;SPAN style="COLOR:blue;"&gt;void&lt;/SPAN&gt; button1_Click(&lt;SPAN style="COLOR:blue;"&gt;object&lt;/SPAN&gt; sender, &lt;SPAN style="COLOR:#2b91af;"&gt;EventArgs&lt;/SPAN&gt; e)&lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR:blue;"&gt;if&lt;/SPAN&gt; (m_myActiveControl != &lt;SPAN style="COLOR:blue;"&gt;null&lt;/SPAN&gt;)&lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_myActiveControl.Dispose();&lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_myActiveControl = &lt;SPAN style="COLOR:blue;"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR:#2b91af;"&gt;MyCustomControl1&lt;/SPAN&gt;();&lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; panel1.Controls.Add(m_myActiveControl);&lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR:blue;"&gt;private&lt;/SPAN&gt; &lt;SPAN style="COLOR:blue;"&gt;void&lt;/SPAN&gt; button2_Click(&lt;SPAN style="COLOR:blue;"&gt;object&lt;/SPAN&gt; sender, &lt;SPAN style="COLOR:#2b91af;"&gt;EventArgs&lt;/SPAN&gt; e)&lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR:blue;"&gt;if&lt;/SPAN&gt; (m_myActiveControl != &lt;SPAN style="COLOR:blue;"&gt;null&lt;/SPAN&gt;)&lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_myActiveControl.Dispose();&lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_myActiveControl = &lt;SPAN style="COLOR:blue;"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR:#2b91af;"&gt;MyCustomControl2&lt;/SPAN&gt;();&lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; panel1.Controls.Add(m_myActiveControl);&lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;}&lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&lt;FONT face=Tahoma&gt;Β) UserControl αντικείμενα που αναφέρονται παραπάνω&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:black;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;&lt;/DIV&gt;
&lt;DIV style="FONT-FAMILY:Courier New;BACKGROUND:white;COLOR:black;FONT-SIZE:10pt;"&gt;
&lt;P style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR:blue;"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR:blue;"&gt;partial&lt;/SPAN&gt; &lt;SPAN style="COLOR:blue;"&gt;class&lt;/SPAN&gt; &lt;SPAN style="COLOR:#2b91af;"&gt;MyCustomControl1&lt;/SPAN&gt; : &lt;SPAN style="COLOR:#2b91af;"&gt;UserControl&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR:blue;"&gt;public&lt;/SPAN&gt; MyCustomControl1()&lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; InitializeComponent();&lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Populate();&lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR:blue;"&gt;private&lt;/SPAN&gt; &lt;SPAN style="COLOR:blue;"&gt;void&lt;/SPAN&gt; Populate()&lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; checkBox1.Checked = &lt;SPAN style="COLOR:blue;"&gt;true&lt;/SPAN&gt;;&lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; checkBox2.Checked = &lt;SPAN style="COLOR:blue;"&gt;false&lt;/SPAN&gt;;&lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; checkBox3.Checked = &lt;SPAN style="COLOR:blue;"&gt;false&lt;/SPAN&gt;;&lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;/DIV&gt;
&lt;DIV style="FONT-FAMILY:Courier New;BACKGROUND:white;COLOR:black;FONT-SIZE:10pt;"&gt;
&lt;P style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR:blue;"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR:blue;"&gt;partial&lt;/SPAN&gt; &lt;SPAN style="COLOR:blue;"&gt;class&lt;/SPAN&gt; &lt;SPAN style="COLOR:#2b91af;"&gt;MyCustomControl2&lt;/SPAN&gt; : &lt;SPAN style="COLOR:#2b91af;"&gt;UserControl&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR:blue;"&gt;public&lt;/SPAN&gt; MyCustomControl2()&lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; InitializeComponent();&lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Populate();&lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR:blue;"&gt;private&lt;/SPAN&gt; &lt;SPAN style="COLOR:blue;"&gt;void&lt;/SPAN&gt; Populate()&lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; label1.Text = &lt;SPAN style="COLOR:#a31515;"&gt;"First"&lt;/SPAN&gt;;&lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; label2.Text = &lt;SPAN style="COLOR:#a31515;"&gt;"Second"&lt;/SPAN&gt;;&lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; label3.Text = &lt;SPAN style="COLOR:#a31515;"&gt;"Third"&lt;/SPAN&gt;;&lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&lt;FONT face=Tahoma&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&lt;FONT face=Tahoma&gt;Με λίγα λόγια η μαμά έχει ένα μέλος (member variable) UserControl, και ένα Control container, το panel1. To να κάνεις ένα UserControl Visible σημαίνει ότι πρέπει να δημιουργήσεις ένα από κάθε είδος (new MyCustomControl1(), new MyCustomControl2(), new MyCustomControl3(), κλπ.) και να έχεις ένα μηχανησμό που να έχει μόνο ένα ορατό κάθε χρονική στιγμή. Πέραν του ότι έτσι χαλάει η εντροπία του σύμπαντος και θα πέσει ο ουρανός στα κεφάλια μας, όλα αυτά τα αντικείμενα κάθονται στη μνήμη και την ξοδεύουν άσκοπα. Το panel1 έχει ένα ControlCollection στο οποίο μπορείς άνετα να κάνεις Add() όπως δείχνω, και Remove() όταν δεν το χρειάζεσαι.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&lt;FONT face=Tahoma&gt;Αν και δεν είμαι απόλυτα σίγουρος, το Remove() θα θέσει αυτόματα το αντικείμενο σε Disposable state, οπότε στην επόμενη γύρα ο σκουπιδιάρης (GarbageCollector) θα το συμμαζέψει. Για σιγουριά (εγώ ή εσύ ο ίδιος) πρέπει να τρέξω π.χ. το πρόγραμμα σε Debug mode βήμα-βήμα και να βλέπω το GDI Object count στον TaskManager.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&lt;FONT face=Tahoma&gt;Σκέψου για λίγο πώς θα μπορούσε κανείς να έχει προγραμματίσει τον Internet Explorer/ Firefox. Κάθε καινούριο Tab που προσθέτεις σημαίνει ότι γίνεται κάτι παρόμοιο με το παραπάνω παράδειγμα. Μια διαφορά είναι ότι αντί για ένα UserControl member, o Explorer θα είχε ένα &lt;FONT face="Courier New"&gt;List&amp;lt;UserControl&amp;gt; m_lstTabs&lt;/FONT&gt;, όπου καλεί την Add/Remove.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;/DIV&gt;</description></item><item><title>Απ: Επικοινωνία μεταξύ User Controls and Forms</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/50996.aspx</link><pubDate>Tue, 26 May 2009 23:10:51 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:50996</guid><dc:creator>bigN</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/50996.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=80&amp;PostID=50996</wfw:commentRss><description>Σε ευχαριστώ φίλε, μετά από πολλη ψάξιμο.... βρήκα τον τρόπο που αναφέρεις (αναφορικά με τα events).&lt;br&gt;&lt;br&gt;&lt;pre class="alt2" style="border:1px inset;margin:0px;padding:6px;overflow:auto;width:640px;height:34px;text-align:left;"&gt;http://www.akadia.com/services/dotnet_user_controls.html#Communication%20between%20User%20Controls%20and%20subscribing%20Applications&lt;/pre&gt;&lt;br&gt;Σχετικά με το (Model-View-Controller pattern) χωρίς να το θέλω :) .... έχω ακολουθήσει ακριβώς αυτή την κατεύθυνση ΟΟP... δηλ. έχω χωρίσει σε αντικείμενα τη ροή του προγράμματος και το μόνο που κάνω είναι να Τα καλώ μέσω user controls...&lt;br&gt;&lt;br&gt;/////&lt;br&gt;&amp;nbsp;4Β) άρα εδώ στο event handler θα διαβάσεις τα δεδομένα από τις κλάσεις του βήματος (1) και θα θέσεις το UserControl2 ως ενεργό&lt;br&gt;////&lt;br&gt;Όταν λες "ως ενεργό" εννοείς &lt;br&gt;UserControl.visible =true;&lt;br&gt;&lt;br&gt;Κάτι άσχετο ακόμα..... τα user control τα δημιουργώ στο contrsuctor και μετα τα κρύβω ή τα εμφανίζω ανάλογα με την περίσταση....&amp;nbsp; είναι "σωστό" αυτό ή καλύτερο θα ήταν να δημιουργώ κάθε φορά κανούργιο user control και το παλιο να γίνεται disposed?&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;</description></item><item><title>Απ: Επικοινωνία μεταξύ User Controls and Forms</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/50985.aspx</link><pubDate>Tue, 26 May 2009 21:23:52 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:50985</guid><dc:creator>panagiotis_georgiadis</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/50985.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=80&amp;PostID=50985</wfw:commentRss><description>&lt;P&gt;Θα πρότεινα να κάνεις διαχωρισμό απεικόνισης και δεδομένων (σύμφωνα με το Model-View-Controller pattern). Επειδή δεν υπάρχει πλήρως καθορισμένος τρόπος υλοποίησης του Model-View-Controller σε WinForms, αυτό που γίνεται σε γενικές γραμμές είναι:&lt;BR&gt;1) να ορίσεις ένα σετ από κλάσεις για να αποθηκεύεις δεδομένα&lt;BR&gt;2) να δημιουργήσεις αντικείμενα από αυτές τις κλάσεις και να αποθηκεύσεις μέσα τα δεδομένα που θέλεις - αυτό θα γίνει π.χ. στο UserControl1&lt;BR&gt;3) να ορίσεις ένα event που να λέει "το UserControl1 έχει καινούρια δεδομένα" και να καλεί ένα event handler ορισμένο π.χ. στο UserControl2&lt;BR&gt;4) το event handler στο UserControl2 θα λέει "όταν έχω καινούρια δεδομένα από άλλο UserControl θέλω να τα απεικονίσω"&lt;BR&gt;4Β) άρα εδώ στο event handler θα διαβάσεις τα δεδομένα από τις κλάσεις του βήματος (1) και θα θέσεις το UserControl2 ως ενεργό&lt;/P&gt;
&lt;P&gt;Αν θες να μάθεις περισσότερα, στείλε email να σου δώσω κώδικα με χειροπιαστό παράδειγμα, ή στείλε μου το δικό σου πρόγραμμα να σου πω πώς να το βελτιώσεις. (panos_g78 "at" yahoo "dot" com)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description></item><item><title>Απ: Επικοινωνία μεταξύ User Controls and Forms</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/50872.aspx</link><pubDate>Fri, 22 May 2009 02:03:43 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:50872</guid><dc:creator>Τάσκος Γιώργος</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/50872.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=80&amp;PostID=50872</wfw:commentRss><description>&lt;P&gt;Ποιά είναι η πρώτη εκδοχή? και ποιά ή άλλη? Τι Controls είναι? τι εννοείς κάθε φόρα φαίνεται μόνο 1 Control?&lt;/P&gt;
&lt;P&gt;Δεν παίζει να κατάλαβε κανείς φίλε μου :(&lt;/P&gt;</description></item><item><title>Επικοινωνία μεταξύ User Controls and Forms</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/50867.aspx</link><pubDate>Thu, 21 May 2009 23:24:10 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:50867</guid><dc:creator>bigN</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/50867.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=80&amp;PostID=50867</wfw:commentRss><description>&lt;p&gt;Γεια σας,&amp;nbsp;&lt;/p&gt;&lt;p&gt;Έχω μια ερώτηση σχετικά με την επικοινωνία μεταξύ
δύο User Control. Εν ολίγις προσπαθώ να μετατρέψω την εφαρμογή μου (C#)
όπου χρησιμοποιώ εκτεταμένα Tab panels σε ένα πιο φιλικό GUI. Η κύρια
φόρμα μου αποτελείται από split container όπου στο αριστερό πανελ έχω
τα κουμπιά και στο δεξι πάνελ εμφανίζονται εναλλάξ τα user control. Έχω
καταφέρει να εμφανίζονται σωστά τα User Control, όμως αυτό που προσπαθώ
να κάνω είναι να συλλέξω τις πληροφορίες από το user control 1, να κάνω
τους υπολογισμούς, και να εμφανίσω τα αποτελέσματα στο user control 2.&amp;nbsp; Κάθε φορά στην φόρμα φαίνεται μόνο το ένα user control.&lt;br&gt;&lt;/p&gt;&lt;p&gt;Η άλλη εκδοχή είναι να εμφανίσω τα αποτελέσματα στην κύρια φόρμα.&lt;br&gt;&lt;/p&gt;Ευχαριστώ.</description></item></channel></rss>