Otvaranje više mdi child formi c#

poruka: 9
|
čitano: 3.154
|
moderatori: XXX-Man, vincimus
1
+/- sve poruke
ravni prikaz
starije poruke gore
14 godina
offline
Otvaranje više mdi child formi c#

Bok svima!

 

da skratim, imam mdi formu unutar koje otvaram više vrsta mdi child formi (u prvoj child obradim dio podataka, sa tim rezultatima idem u drugi child ... i tako do četvrte). Ujedno sam omogućio pregled svih međukoraka, tako da se po imenu datoteke otvara željena child forma. Sve radi i sve je pet, ali... (previše podataka da sve stavim unutar jedne forme)

 

      switch (tip)
            {
                case "prva":
                    frmPrviChild crf = new frmPrviChild();
                    crf.MdiParent = this;
                    crf.Show();
                    listaMRU(fName);
                    return;
                case "druga":
                    frmDrugiChild crfV = new frmDrugiChild ();
                    crfV.MdiParent = this;
                    crfV.Show();
                    listaMRU(fName);
                    return;
                case "svaka slijedeća":
                    frmSlijedeca crfD = new frmSlijedeca();
                    crfD.MdiParent = this;
                    crfD.Show();
                    listaMRU(fName);
                    return;

            }

 

Probao sam skratiti da dio iza case stavim u posebnu metodu, ali nisam se ispetljao.

Ako ne nađem odgovor ovdje, ostaje mi još Chuck Noris{#}

 

 

 

Moj PC  
0 0 hvala 0
17 godina
offline
Otvaranje više mdi child formi c#

Ne kužim baš pitanje {#} , O.o

'Genius might be the ability to say a profound thing in a simple way' Charles Bukowski
 
0 0 hvala 0
14 godina
offline
Re: Otvaranje više mdi child formi c#

Htio bih ovo:

 

cijeli dio u case strukturi prebaciti u nešto ovakvo:

 

 private void otvoriChildForm(Form frm)
        {
            frm bilokojaMdiChildForma = new frm();

            bilokojaMdiChildForma.MdiParent = this;

       bilokojaMdiChildForma.Show();
            bilokojaMdiChildForma.FormClosed += new FormClosedEventHandler(Chi

        }

 

i sada ovo:

 

 

switch (tip)
            {
                case "prva":
                    otvoriChildForm(frmPrviChild);

                    break;
                case "druga":
                    otvoriChildForm(frmDrugiChild);
                    break;
                case "svaka slijedeća":
                    otvoriChildForm(frmSlijedeca);
                    break;

            }

 

Što više razmišljam o ovome ispada mi da pilim bez veze{#}

 

17 godina
neaktivan
offline
Otvaranje više mdi child formi c#

možda da koristiš reflection?

 

   public static System.Windows.Forms.Form CreateForm( string sFullName, params object[] args )
{
    System.Windows.Forms.Form callingObject = (System.Windows.Forms.Form)Assembly.GetExecutingAssembly().CreateInstance( sFullName, false, BindingFlags.CreateInstance, null, args, System.Globalization.CultureInfo.CurrentCulture, null );
    callingObject.MdiParent = mdiParent;
    callingObject.FormClosed += new FormClosedEventHandler( callingObject_FormClosed );
    return callingObject;
}

static void callingObject_FormClosed( object sender, FormClosedEventArgs e )
{

}

 

Ne moraš koristit case-ove, samo pozoveš CreateForm("Namespace.frmNesto").Show();

Checked-out since 1983
Poruka je uređivana zadnji put ned 8.1.2012 18:39 (st.srki).
 
0 0 hvala 0
14 godina
offline
Re: Otvaranje više mdi child formi c#

Hm, ako u svakoj formi imam property koji se drugačije zove?

 

Vjerojatno ih trebam preimenovati da se jednako zovu.

U mdi formi preko open dialoga otvaram datoteku i proslijeđujem je u formu preko property-ja gdje se u form_load otvara datoteka.

Ili se to može rješiti preko args?

17 godina
neaktivan
offline
Re: Otvaranje više mdi child formi c#

Ne trebaš koristit property-e za slanje parametara. Možeš ih slati preko args, s tim da u konstruktoru forme koju pozivaš moraš definirati parametre koje šalješ.

Checked-out since 1983
14 godina
offline
Re: Otvaranje više mdi child formi c#

Radi savršeno nakom male modifikacije. Fja je u mdiParent formi, ne treba mi return (barem mislim da ne).

ChildFormList je lista sa otvorenim mdiChild formama gdje provjeravam da li je mdiChild otvoren. Vjerujem da postoji 'ispravniji' način ali ovo me zadovoljava u potpunosti.

MdiParent i Text sam postavio ovdje jer nisam dobio ispravne vrijednosti za usporedbu ChildFormList i callingObject.

Primjetio sam da bez ovog uvjeta nakon pet-šest otvorenih formi program se uspori, desilo se da tek kad ostanem na tri otvorene forme sve radi ok.

 

 

private static List<string> ChildFormList = new List<string>();


private void CreateForm(string sFullName, params object[] args)
{
    Form callingObject = (Form)Assembly.GetExecutingAssembly().CreateInstance(sFullName, false,
            BindingFlags.CreateInstance, null, args, System.Globalization.CultureInfo.CurrentCulture, null);
    callingObject.MdiParent = this;
    callingObject.Text = callingObject.Text + " - " + args[0].ToString();
    if (!ChildFormList.Contains(callingObject.ToString()))
    {
        ChildFormList.Add(callingObject.ToString());
        listaMRU(args[0].ToString());
        callingObject.Show();
        callingObject.FormClosed += new FormClosedEventHandler(callingObject_FormClosed);
    }
    else
    {
        //activated existing form
        CustomMsgBox.Show("Imate otvorenu datoteku sa tim imenom!",
                          "Zapisnik snimanja", "U redu", "Odustani", false);
    }
}

static void callingObject_FormClosed(object sender, FormClosedEventArgs e)
{
    Form f = (Form)sender;
    ChildFormList.Remove(f.ToString());
}

 

Trebao bih još jedan savjet: nakon CustomMessageBox-a htio bih da forma koja ima otvorenu datoteku postane aktivna. Probao sam sa Show(), Visible ... ali pali mi novu instancu forme.

 

17 godina
neaktivan
offline
Re: Otvaranje više mdi child formi c#

private static SortedList<string, Form> ChildFormList = new SortedList<string, Form>();

private void CreateForm( string sFullName, params object[] args )
{
    if ( !ChildFormList.ContainsKey( sFullName ) )
    {
        Form callingObject = (Form)Assembly.GetExecutingAssembly().CreateInstance( sFullName, false,
           BindingFlags.CreateInstance, null, args, System.Globalization.CultureInfo.CurrentCulture, null );
        callingObject.MdiParent = this;
        callingObject.Text = callingObject.Text + " - " + args[0].ToString();
        callingObject.Name = sFullName;

        ChildFormList.Add( sFullName, callingObject );
        listaMRU( args[0].ToString() );

        callingObject.FormClosed += new FormClosedEventHandler( callingObject_FormClosed );
    }

    ChildFormList[sFullName].Show();
    ChildFormList[sFullName].BringToFront();
}

static void callingObject_FormClosed( object sender, FormClosedEventArgs e )
{
    Form f = (Form)sender;
    ChildFormList.Remove( f.Name );
}

 

Malo san prepravija kôd da bude ispravnije. Nisan testira al tribalo bi bit ok.

Checked-out since 1983
14 godina
offline
Re: Otvaranje više mdi child formi c#

Dobar komad koda, ali mi se čini da smo se razišli. Po ovome kodu ispada da mogu otvoriti samo jednu istancu forme sFullName (npr. prviMdiChild). Trebao bih otovriti vše istih formi, razlika je samo u otvorenoj datoteci

callingObject.Text = callingObject.Text + " - " + args[0].ToString();

znači dok god provjerava ChildFormList sa sFullName moguće je otvoriti samo jednu instancu. Umjesto

ChildFormList.Add( sFullName, callingObject );

moglo bi ići

ChildFormList.Add( callingObject.Text, callingObject );

Međutim, nije mi jasno kako postaviti bilo što smisleno umjesto sFullName u if?

 

A sada spavanac, već dva tjedna liježem poslije 2 (ujutro, ne popodne {#})

 

 

 

1
Nova poruka
E-mail:
Lozinka:
 
vrh stranice