Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    C# - Usare una classe come parametro di un metodo

    Ciao a tutti,
    volevo sapere se era possibile passare come parametro a un metodo, una classe generica.
    Mi spiego meglio:

    ho un form MDI parent in cui si aprono delle MDI Child.
    Ho necessità di non fare aprire un seconda volta una Form MDI Child se questa è già aperta.
    Per farlo volevo utilizzare questo metodo

    codice:
            private void openMdiChild(Form frm)
            {
                frm xForm;
                foreach (Form childForm in this.MdiChildren)
                {
                    if (childForm.GetType() == typeof(frm))
                    {
                        childForm.Focus();
                        return;
                    }
                }
                xForm = new frm();
                xForm.MdiParent = this;
                xForm.Show();
            }
    Il problema è che non mi viene accettato un oggetto generico Form come parametro.

    Avete qualche soluzione o qualche metodo alternativo per ottenere lo stesso scopo (evitare l'apertura della stessa MDI Child più volte)?

    Grazie

  2. #2
    C'è qualcosa che non mi torna
    codice:
    private void openMdiChild(Form frm)
    {
    frm xForm;//Questa che dichiarazione è?? dovremme essere Form xForm=frm; casomai
    foreach (Form childForm in this.MdiChildren) //questo this a chi si riferisce??
    {
    if (childForm.GetType() == typeof(frm))//è meglio usare "Form" che frm oppure frm.class
    {
    childForm.Focus();
    return;
    }
    }
    xForm = new frm(); //sbagliato semmai new Form() ma poi a che serve??
    xForm.MdiParent = this;
    xForm.Show();
    }

  3. #3
    Infatti il mio problema è che non so come prendere la classe che viene utilizzata come parametro del metodo..

  4. #4
    Ho risolto con un po' di difficoltà..

    Se servisse a qualcuno posto il metodo:

    codice:
            private Dictionary<Type, Form> SingleInstanceForms = new Dictionary<Type, Form>();
    
            protected Form ActivateForm<T>() where T : Form, new()
            {
    
                if (!this.SingleInstanceForms.ContainsKey(typeof(T)))
                {
    
                    foreach (Form frm in this.MdiChildren)
                    {
                        frm.Close();
                    }
    
                    T newForm = new T();
                    
                    newForm.MdiParent = this;
                    newForm.FormClosed += new FormClosedEventHandler
                        (delegate(object sender, FormClosedEventArgs e)
                        {
                            this.SingleInstanceForms.Remove(sender.GetType());
                        });
    
                    this.SingleInstanceForms.Add(typeof(T), newForm);
                }
                Form formToActivate = this.SingleInstanceForms[typeof(T)];
                formToActivate.Show();
                formToActivate.WindowState = FormWindowState.Maximized;
                formToActivate.Activate();
    
                return formToActivate;
            }
    Grazie lo stesso...

  5. #5
    Dimenticavo..

    per richiamare il metodo è sufficiente fare questo:

    codice:
    this.ActivateForm<NomeClasseForm>();

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320

    Moderazione

    1) C# e compagnia bella vengono trattati nel forum dedicato ai linguaggi .NET: Visual Basic e .NET Framework

    2) Il codice va postato usado gli appositi tag CODE, come espressamente specificato al punto 6 di tutti i Regolamenti interni a quest'area.


    Sposto e correggo ove possibile.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.