Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di nifriz
    Registrato dal
    Jan 2008
    Messaggi
    2,058

    [C#][Form MDI] Come scoprire se un figlio è attivo?

    Ciao,
    sto cercando di entrare nelle logiche di C# e mi son imbattuto nel primo problema.
    Ho creato una form MDIParent e sto cercando di far si che a determinati eventi si possano visualizzare i figli.

    Fino ad ora nessun problema, ho fatto così:

    codice:
    ProductForm newMDIChild = new ProductForm();
    newMDIChild.MdiParent = this;
    newMDIChild.Show();
    Metterò poi il tutto in una TRY per evitare errori.
    Ho bisogno però che alcuni child si possano aprire una sola volta, quindi devo determinare se risultano già aperti.

    Come faccio? Stavo cercando di utilizzare ActiveChildMDI ma non ne esco.
    Avete qualche dritta?

    p.s. Non so se cambia qualcosa (NON CREDO) ma utilizzo SharpDevelop come tool.

    Grazie e Ciao

  2. #2
    Utente di HTML.it L'avatar di nifriz
    Registrato dal
    Jan 2008
    Messaggi
    2,058
    Dimenticavo! Inoltre se aggiungo le istruzioni citate sopra in una TRY/FINALLY, come faccio nella finally a "distruggere" il figlio per liberare la memoria che rimarrebbe altrimenti allocata?

  3. #3
    Utente di HTML.it L'avatar di nifriz
    Registrato dal
    Jan 2008
    Messaggi
    2,058
    Ho risolto la prima parte in questo modo:

    codice:
    if (FormAttiva(sender, "ClientiForm") != true)
    			 {
    				try {
    					ClientiForm MDIChild = new ClientiForm();
    		        	                          MDIChild.MdiParent = this;
    		    		             MDIChild.Show();
    				    } 
    				finally 
    					{
    					 
    					}
    			  }
    Dove FORMATTIVA l'ho strutturata così:
    codice:
    private Boolean FormAttiva(object sender, string FormName)
    		{
    			Boolean Attivo = new Boolean();
    			Attivo = false;
    			
    			foreach (Form CurrentForm in this.MdiChildren)
    			{
    				Type VarTemp = CurrentForm.GetType();
    				if (VarTemp.Name == FormName)
    				{
    					Attivo = true;
    					break;
    				}
    			}
    			return Attivo;
    		}


    Ancora però ho il dubbio su come utilizzare la DESTROY o qualcosa di simile nella FINALLY, perchè non mi vede la variabile MDICHILD. CONSIGLI???

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    Ti stavo consigliando questo codice, leggermente più compatto:

    codice:
     private void button1_Click(object sender, EventArgs e)
            {
                if (FormExist("MyChild1") == true) return;
                Form2 newMDIChild = new Form2();
                newMDIChild.MdiParent = this;
                newMDIChild.Name = "MyChild1";
                newMDIChild.Show();
            }
    
    public bool FormExist(string name)
            {           
                    foreach (Form Form in this.MdiChildren )
                {
                    if (Form.Name == name)
                        return true;           
                }
                return false;
            }

    Ancora però ho il dubbio su come utilizzare la DESTROY o qualcosa di simile nella FINALLY, perchè non mi vede la variabile MDICHILD. CONSIGLI
    Devi dichiarare tale variabile sopra il blocco Try.
    Sbagliare è umano, perseverare è diabolico.

  5. #5
    Utente di HTML.it L'avatar di nifriz
    Registrato dal
    Jan 2008
    Messaggi
    2,058
    Quindi spacco in 2 la parte di inzializzazione e dichiarazione...
    ...cavolo così semplice e mi sfuggiva!!!

    Grazie mille

  6. #6
    Utente di HTML.it L'avatar di nifriz
    Registrato dal
    Jan 2008
    Messaggi
    2,058
    codice:
    ClientiForm MDIChild;
    try {
    	MDIChild = new ClientiForm();
            	MDIChild.MdiParent = this;
    	MDIChild.Show();
         } 
    finally 
        {
    	MDIChild.Dispose();
        }
    Ho provato a dichiarare fuori la variabile, ed ottengo il seguente errore:
    Utilizzo della variabile locale 'MDIChild' non assegnata. (CS0165)

    Potrei portare fuori MDIChild = new ClientiForm(); ma perderebbe senso la finally, anzi smetterebbe di funzionare... Idee?

  7. #7
    Utente di HTML.it L'avatar di nifriz
    Registrato dal
    Jan 2008
    Messaggi
    2,058
    Nessuno ha idee?

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.