Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14

Discussione: C# Form Figlio e Padre

  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    46

    C# Form Figlio e Padre

    Scusate ho sbagliato ne ho creato una nuova.... :master:

    Discussione

    Allora nel mio applicativo utilizzo questo codice per verificare se un form figlio è già stato aperto e quindi fare un Focus della finestra o aprirlo nel form padre nel non fosse aperto...

    codice:
    public void AperturaTab(object sender, EventArgs e)
            {
                Tabelle Form = new Tabelle();
                if ((bool)IsOpened("Tabelle"))
                {
                    Form.Focus();
                }
                else
                {
                    Form.Name = "Tabelle";
                    Form.MdiParent = this;
                    Form.Show();
                }
            }
            private object IsOpened(string Nome)
            {
                foreach (Form Figlio in this.MdiChildren)
                {
                    if (Figlio.Name == Nome)
                    {
                        return true;
                    }
                }
                return false;
            }
    Ho notato che però non mi fa il Focus delle finestre...provando con la modalità Debug la codizione mi risulta vera, quindi mi esegue l'istruzione Form.Focus()....

    Per caso c'é qualche propietà del Form da andare a settare....


    Grazie.......

  2. #2
    Utente di HTML.it L'avatar di fu510n
    Registrato dal
    Sep 2005
    Messaggi
    137
    Normale...
    Perchè tu crei un nuovo form prima di verificare se sia già aperto.

    Prova così:

    codice:
    public void AperturaTab(object sender, EventArgs e)
            {
                'DA QUI
                'Tabelle Form = new Tabelle();
                if ((bool)IsOpened("Tabelle"))
                {
                    Form.Focus();
                }
                else
                {
                    'A QUI
                    Tabelle Form = new Tabelle(); 
    
                    Form.Name = "Tabelle";
                    Form.MdiParent = this;
                    Form.Show();
                }
            }
            private object IsOpened(string Nome)
            {
                foreach (Form Figlio in this.MdiChildren)
                {
                    if (Figlio.Name == Nome)
                    {
                        return true;
                    }
                }
                return false;
            }
    Fusion

    Currency Text Box (Updated: 16 Maggio 2008): http://digilander.libero.it/cmfusion/CurrencyTextBox.html

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    46
    Originariamente inviato da fu510n
    Normale...
    Perchè tu crei un nuovo form prima di verificare se sia già aperto.

    Prova così:

    codice:
    public void AperturaTab(object sender, EventArgs e)
            {
                'DA QUI
                'Tabelle Form = new Tabelle();
                if ((bool)IsOpened("Tabelle"))
                {
                    Form.Focus();
                }
                else
                {
                    'A QUI
                    Tabelle Form = new Tabelle(); 
    
                    Form.Name = "Tabelle";
                    Form.MdiParent = this;
                    Form.Show();
                }
            }
            private object IsOpened(string Nome)
            {
                foreach (Form Figlio in this.MdiChildren)
                {
                    if (Figlio.Name == Nome)
                    {
                        return true;
                    }
                }
                return false;
            }
    Me lo avevi già detto...

    comunque mi perde il riferimento....


    codice:
    Occorre un riferimento a un oggetto per la proprietà, il metodo o il campo non statico 'System.Windows.Forms.Control.Focus()'

  4. #4
    Utente di HTML.it L'avatar di fu510n
    Registrato dal
    Sep 2005
    Messaggi
    137
    Logico... adesso "Form" non ha alcun riferimento...

    Cambia la funzione IsOpened come segue (scusa ma uso VB.NET)
    codice:
        Private Function IsOpened(ByVal Nome As String) As Integer
            For I As Integer = 0 To Me.MdiChildren.GetUpperBound(0)
                If Me.MdiChildren(I).Name = Nome Then
                    Return I
                End If
            Next
            Return -1
        End Function
    E il resto così:
    codice:
        Dim Result As Integer = IsOpened("Figlioccio")
        If  Result = -1 Then
            NomeFiglio = New Form
            NomeFiglio.MdiParent = Me
            NomeFiglio.Name = "Figlioccio"
            NomeFiglio.Show()
        Else
            Me.MdiChildren(Result).Focus()
        End If
    Fusion

    Currency Text Box (Updated: 16 Maggio 2008): http://digilander.libero.it/cmfusion/CurrencyTextBox.html

  5. #5
    Utente di HTML.it L'avatar di fu510n
    Registrato dal
    Sep 2005
    Messaggi
    137
    Comunque sia da notare una cosa... Tu imposti (e così anche io adesso per farti l'esempio) il nome del form manualmente. I tuoi form in visual studio, finestra proprietà, proprietà "Name", hanno già un nome... Puoi fare riferimento a quello, no?

    Prova ad inserire un pulsantino che esegue questo codice:

    codice:
    For Each Finestra As Form In Me.MdiChildren
        MessageBox.Show(Finestra.Name)
    Next
    Poi apri un paio di finestre e clicchi sul pulsantino (che metti nel menù principale o in una toolbar). Ti compariranno tutti i nomi dei form aperti così puoi farti un'idea di come richiamarli.

    In questo modo potresti usare il vecchio codice che ti ho postato con tanto di funzione IsOpened invariata.

    Esempio:
    ----------------------------------------------------------
    Se il tuo Form si chiama "Anagrafiche" e tu da codice richiami
    codice:
    MessageBox.Show(Anagrafiche.Name)
    Il risultato sarà una finestra messaggio con su scritto "Anagrafiche".
    Fusion

    Currency Text Box (Updated: 16 Maggio 2008): http://digilander.libero.it/cmfusion/CurrencyTextBox.html

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    46
    Non riesco a visualizzare le proprietà del Form se prima non creo l'oggetto.....

    La tua funzione non riesco ad adattarla a c#....

  7. #7
    Utente di HTML.it L'avatar di fu510n
    Registrato dal
    Sep 2005
    Messaggi
    137
    ...
    In visual studio, esplora soluzioni, selezioni il form che hai creato prima... nel tuo caso se non erro si chiama "Tabelle". Vedi le proprietà... su "Name" cosa ci sta scritto?

    Purtroppo adesso nn posso convertire la funzione in C#... sono parecchio impegnato. Se non risolvi, appena posso vedo ti do una mano.
    Fusion

    Currency Text Box (Updated: 16 Maggio 2008): http://digilander.libero.it/cmfusion/CurrencyTextBox.html

  8. #8
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    46
    Originariamente inviato da fu510n
    ...
    In visual studio, esplora soluzioni, selezioni il form che hai creato prima... nel tuo caso se non erro si chiama "Tabelle". Vedi le proprietà... su "Name" cosa ci sta scritto?

    Purtroppo adesso nn posso convertire la funzione in C#... sono parecchio impegnato. Se non risolvi, appena posso vedo ti do una mano.
    Grazie per il tuo aiuto....

    Sono tornato a casa adesso dal lavoro..

    Nella proprietà name ho scritto "Tabelle"...

  9. #9
    Utente di HTML.it L'avatar di fu510n
    Registrato dal
    Sep 2005
    Messaggi
    137
    Se il tuo form si chiama "Tabelle" quando lo crei non dovresti assegnare il nome...


    Quindi questo dovrebbe funzionare:
    codice:
            public void AperturaTab(object sender, EventArgs e)
            {
                if ((bool)IsOpened("Tabelle"))
                {
                    Tabelle.Focus();
                }
                else
                {
                    Tabelle Form = new Tabelle(); 
    
                    Form.MdiParent = this;
                    Form.Show();
                }
            }
    
            private object IsOpened(string Nome)
            {
                foreach (Form Figlio in this.MdiChildren)
                {
                    if (Figlio.Name == Nome)
                    {
                        return true;
                    }
                }
                return false; 
              }
    Fammi sapere. Purtroppo non lavoro quasi mai in C# e qui in ufficio ho solo VB...
    Fusion

    Currency Text Box (Updated: 16 Maggio 2008): http://digilander.libero.it/cmfusion/CurrencyTextBox.html

  10. #10
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    46
    Originariamente inviato da fu510n
    Se il tuo form si chiama "Tabelle" quando lo crei non dovresti assegnare il nome...


    Quindi questo dovrebbe funzionare:
    codice:
            public void AperturaTab(object sender, EventArgs e)
            {
                if ((bool)IsOpened("Tabelle"))
                {
                    Tabelle.Focus();
                }
                else
                {
                    Tabelle Form = new Tabelle(); 
    
                    Form.MdiParent = this;
                    Form.Show();
                }
            }
    
            private object IsOpened(string Nome)
            {
                foreach (Form Figlio in this.MdiChildren)
                {
                    if (Figlio.Name == Nome)
                    {
                        return true;
                    }
                }
                return false; 
              }
    Fammi sapere. Purtroppo non lavoro quasi mai in C# e qui in ufficio ho solo VB...
    Ciao....

    allora io non riesco a visualizzare il metodo Focus() se prima non creo l'oggetto all'interno del codice.......

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.