none
Problemi sull'assegnamento di un controllo dinamico nei form

    Domanda

  • private void numero_quiz_Click(object sender, EventArgs e)
            {
                this.Visible = false;
                Form frm = new Form();
                frm.Size = new Size(500, 500);
                frm.Name = "form2";
                frm.FormClosed += new FormClosedEventHandler(chiudo_applicazione);
                frm.Shown += new EventHandler(creazione_quiz);
                frm.Visible = true;
            }
            private void chiudo_applicazione(object sender, EventArgs e)
            {
                Application.Exit();
            }
            private void creazione_quiz(object sender, EventArgs e)
            {
                Form frm = (Form)this.Controls["form2"];
                frm.Text="prova";
    
            }
    Perché mi da errore quando provo ad assegnare un nome alla form creata dinamicamente?
    venerdì 20 maggio 2016 14:36

Risposte

  • Allora, posto che preparerò un esempio di come generare dinamicamente dei controlli in una form perché credo possa essere utile non solo a te ma a molti che si avvicinano alla programmazione in C#, ti pongo alcune domande che possano darti un aiutino:

    - I tuoi quiz hanno delle forme prestabilite? ad esempio una domanda e 4 opzioni di cui una giusta oppure una domanda con più opzioni da scegliere?

    Se la risposta è Si ed hai a disposizione diciamo 2, 3 o anche 4 o 5 formati di quiz, quello che ti conviene fare è creare uno user control per ogni tipo di quiz e, in base al quiz scelto, leggere dal file le informazioni da inserire nello user control e semplicemente riempire le stringhe delle label con la domanda e le opzioni e registrare poi da qualche parte la risposta o le risposte dell'utente assieme al codice della domanda a cui ha risposto per poi alla fine del quiz fare una lista delle domande e risposte corrette a chi lo usa.

    Uno user control lo puoi istanziare e aggiungere alla collection controls della tua form principale senza dover generare ulteriori forms.

    Come fai a riempire le label degli user control con i dati letti dal file? molto semplicemente esponendo le property come public sullo user control o, se sei davvero pigro, marcando direttamente le label come public sullo user control.

    Spero di averti dato qualche idea utile, se ho tempo nel pomeriggio preparo un esempio di how to con le form e gli user control in modo che tu abbia anche del codice di esempio. intanto prova a giocare con queste idee.


    Sabrina C. - http://www.dotnetwork.it

    martedì 24 maggio 2016 07:43
  • Come promesso, ho preparato un esempio, e ho indicato anche perché è meglio non usare questo approccio.Creare Dinamicamente controlli da codice è l'esempio. Buona serata.


    Sabrina C. - http://www.dotnetwork.it

    martedì 24 maggio 2016 17:03

Tutte le risposte

  • Probabilmente perché non hai aggiunto form2 alla collezione dei controlli e comunque non avrebbe molto senso aggiungere una form ai controlli di un altra form.

    non sembra esserti troppo chiaro il funzionamento degli oggetti e delle form. Perché non provi a spiegarci cosa vuoi fare così ti aiutiamo un po' meglio. Intanto, ho messo a posto il tuo codice in modo che ti mostri come funziona la creazione di una form sul click del button e l'interazione con la stessa.

    Non nascondo la form principale perché non ho mai fatto una applicazione con un simile comportamento ;o)

    	public partial class Form1 : Form
    	{
    		public Form1()
    		{
    			InitializeComponent();
    		}
    
    
    		private void btnNumeroQuiz_Click(object sender, EventArgs e)
    		{
    			Form frm = new Form();
    			frm.Name = "Form2";
    			frm.Owner = this;
    			frm.Size = new Size(500, 500);
    			frm.FormClosed += Frm_FormClosed;
    			frm.Shown += Frm_Shown;
    			frm.Show();
    		}
    
    		private void Frm_Shown(object sender, EventArgs e)
    		{
    			Form frm = sender as Form;
    			if (frm != null)
    			{
    				frm.Text = "Ciao sono la form";
    			}
    		}
    
    		private void Frm_FormClosed(object sender, FormClosedEventArgs e)
    		{
    			//Fai qualcosa quando la form viene chiusa
    		}
    	}


    Sabrina C. - http://www.dotnetwork.it

    venerdì 20 maggio 2016 17:39
  • In pratica io voglio fare quiz che va a caricare le domande da dei file di testo e fino li va tutto bene il problema e il seguente come puoi guardare il codice io sulla form principale ho messo soltanto una trackbar e un pulsante che una scelto il numero di quiz viene aperto una nuova form dinamica e nascosta quella statica, quindi io su questa form dinamica dovrei andare a generare tutti i pannel contenenti le lable e dei radio button per le risposte pero il problema e che non so come andare a creare tutto questo sulla pannel dinamica. Ecco qua il codice sorgente https://mega.nz/#!Wkg33DjR!n5o_KS7-_w7PxOQiDgQx-kE_P1rh0_Acbso_tW_0l0A
    lunedì 23 maggio 2016 16:47
  • Allora, posto che preparerò un esempio di come generare dinamicamente dei controlli in una form perché credo possa essere utile non solo a te ma a molti che si avvicinano alla programmazione in C#, ti pongo alcune domande che possano darti un aiutino:

    - I tuoi quiz hanno delle forme prestabilite? ad esempio una domanda e 4 opzioni di cui una giusta oppure una domanda con più opzioni da scegliere?

    Se la risposta è Si ed hai a disposizione diciamo 2, 3 o anche 4 o 5 formati di quiz, quello che ti conviene fare è creare uno user control per ogni tipo di quiz e, in base al quiz scelto, leggere dal file le informazioni da inserire nello user control e semplicemente riempire le stringhe delle label con la domanda e le opzioni e registrare poi da qualche parte la risposta o le risposte dell'utente assieme al codice della domanda a cui ha risposto per poi alla fine del quiz fare una lista delle domande e risposte corrette a chi lo usa.

    Uno user control lo puoi istanziare e aggiungere alla collection controls della tua form principale senza dover generare ulteriori forms.

    Come fai a riempire le label degli user control con i dati letti dal file? molto semplicemente esponendo le property come public sullo user control o, se sei davvero pigro, marcando direttamente le label come public sullo user control.

    Spero di averti dato qualche idea utile, se ho tempo nel pomeriggio preparo un esempio di how to con le form e gli user control in modo che tu abbia anche del codice di esempio. intanto prova a giocare con queste idee.


    Sabrina C. - http://www.dotnetwork.it

    martedì 24 maggio 2016 07:43
  • Come promesso, ho preparato un esempio, e ho indicato anche perché è meglio non usare questo approccio.Creare Dinamicamente controlli da codice è l'esempio. Buona serata.


    Sabrina C. - http://www.dotnetwork.it

    martedì 24 maggio 2016 17:03