Toon posts:

[C#] Forms onderling laten communiceren

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoi,

Ik ben een aantal weken bezig met C#, gaat opzich lekker, maar 1 vraagstukje heb ik nog steeds niet op kunnen lossen.

Stel, je hebt meerder forms (Form1, Form2), dan wil ik vanuit Form1 Form2 openen. Dat kan op deze manier:

code:
1
2
Form2 frm = new Form2();
frm.Show();


Maar, op deze manier opent 'ie een nieuwe instance van Form2, ook al is Form2 al geopend.

Nu ben ik van Visual Basic 6 gewend, dat je met Form2.Show gewoon het form zelf kunt openen. Op die manier kun je ook vanuit Form1 waardes veranderen in Form2, bijvoorbeeld een Label.

Op die manier wordt het een stuk makkelijk om onderling dingen uit te wisselen tussen forms.

Hopelijk heeft iemand de langgezochte oplossing voor me! :)

[ Voor 11% gewijzigd door Verwijderd op 21-02-2005 00:51 ]


Verwijderd

Ik denk dat je het volgende bedoeld..

Als je vanuit Form1 ... Form2 opent dan moet hij dit 1 X doen en niet bij elke keer een Nieuwe Form2 instancieren en openen..

Hierbij kan je oplossing denk ik dit zijn..

bij de declaratie van de standaardvars (Dus boven de constructor van Form1.. Dus voor de procedures / functions / methodes (Hoe dat ook genoemd mag worden in c#)) zet je bijv. het volgende:
C#:
1
private Form2 form = new Form2();

Als je dan Form2 wilt openen kan je dit doen (Dus bijv in de code van de button click)
C#:
1
2
3
4
5
6
7
    if (this.form.Visible)  {  // Als visible dan Invisible anders Visible maken.
        this.form.Hide(); 
    }
    else
    {
        this.form.Show();
    }

Ik hoop dat dit je oplossing is waar je al zo lang naar zocht ..

[ Voor 18% gewijzigd door Verwijderd op 21-02-2005 01:20 . Reden: typos ]


Verwijderd

Topicstarter
Jaaa!

Ooh wat goed man.. dat is 'm! Thanks!

Verwijderd

No Problem.

  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 01-05 19:09

pjvandesande

GC.Collect(head);

edit:
Questa moet leren lezen
:/

[ Voor 89% gewijzigd door pjvandesande op 21-02-2005 08:43 ]


Verwijderd

hhhmmm, als je het zo doet dan heb je straks alsnog meedere instanties van Form2 alleen zie je ze niet.
De volgende code is beter geschikt denk ik zo.
Hij koppeld de form aan de form die hem opend en kijkt dan of hij al bestaat.

Bestaat hij al, dan gewoon laten zien. En return zonder een nieuwe te maken.

Bestaat hij niet dan maken we hem alsnog aan.

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
        private void button1_Click(object sender, System.EventArgs e)
        {
            foreach ( Form f in this.OwnedForms ) 
            { 
                if (f is Form2) 
                { 
                    f.Show(); 
                    f.Focus(); 
                    return; 
                } 
            } 
 
            //need a new one 
 
            Form2 f2 = new Form2(); 
            this.AddOwnedForm(f2); 
            f2.Owner = this; 
            f2.Show(); 
        }


Succes.

  • alley
  • Registratie: Mei 2002
  • Laatst online: 19-04-2023

alley

ahuh

@Jinta: nee hoor, dat van freak1983 is gewoon goed en maakt maar 1 instantie van form2 aan

I am always doing that which I can not do, in order that I may learn how to do it. (Pablo Picasso)


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 12-05 20:13
Tis alleen jammer dat hij al een instantie aanmaakt bij het instantieren van Form1. Je kunt to in je functie checken of de ref null is en zo niet dan eentje aanmaken?

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • DrDelete
  • Registratie: Oktober 2000
  • Laatst online: 09:32
Tip: probeer zo min mogelijk applicatie-flow in forms te registeren(form1 roept form2 aan in jouw geval), probeer deze flow uit de form te halen en in een andere class te zetten, zodoende kun je forms hergebruiken.
Pagina: 1