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

    [C#] Usare oggetto di un'altra instanza

    Salve ragazzi ho un problema, ho creato un primo form, nella quale alla
    pressione di un pulsante, viene creato un secondo form, in questo secondo
    form, devo fare in modo che alla pressione di un altro pulsante, vengano
    cancellati i pulsanti che si trovano sul primo form, aperto precedentemente.
    Però quando premo il pulsante del secondo form, il pulsante del primo form,
    non viene cancellato.Posto qui sotto il codice,

    codice:
    private void primoForm_Click(object sender, EventArgs e)
    
    {
    
        Form2 frm = new Form2();
        frm.Show();
        frm.Refresh();
    
       frm.Activate();
    }
    
    private void secondoForm_Click(object sender, EventArgs e)
    
    {
       Form1 form1 = new Form1();
       this.Controls.Remove(form1.pulsante);
    }
    Penso che l'errore è dovuto a quando form 2 avvia l'evento del form 1, ovviamente dovendo instanziare un nuovo oggetto riferito alla classe form1, per accedere ai suoi metodi, questo evento non va a buon fine, perchè cerca di
    cancellare il bottone che però è stato creato da un'altro oggetto, infatti viene segnalato l'errore che l'oggetto bottone, non è stato instanziato.
    Secondo voi come posso risolvere il tutto?

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    23,904
    Quando crei un'istanza del Form, ne memorizzi un riferimento all'interno della variabile; tale variabile ti potrà servire per agire su un oggetto modificando le proprietà e chiamandone i metodi.

    Nel tuo caso, dopo aver creato la Form2, devi passare a quell'istanza il riferimento alla Form1 che è sua chiamante, memorizzandolo in un campo della classe Form2.

    Dal codice che implementa Form2 potrai utilizzare questo riferimento per manipolarne i campi.

    Per esemplificare, questo è il codice del primo form (Form1).
    codice:
        public partial class Form1 : Form
        {
            private void callForm2Button_Click(object sender, EventArgs e)
            {
                // Creo un'istanza di Form2
                Form2 frm = new Form2();
    
                // Assegno al campo il riferimento all'istanza corrente di Form1
                frm.form1Reference = this;
    
                // Visualizzo l'istanza di Form2
                frm.ShowDialog();
            }
        }
    Questo è il codice ipotetico per il secondo Form (Form2):
    codice:
        public partial class Form2 : Form
        {
            public Form1 form1Reference;
    
            private void changeForm1_Click(object sender, EventArgs e)
            {
                // Modifico la casella di testo sull'istanza di Form1
                form1Reference.demoTextBox.Text = "Test";
            }
        }
    In sostanza, il Form1 contiene un pulsante che crea un'istanza di Form2 passando un riferimento a se stessa affinchè essa possa utilizzare tale riferimento per richiamarne metodi e modificarne proprietà; il metodo ShowModal visualizza il form.

    Nel codice di Form2, è presente la dichiarazione del campo che conterrà il riferimento all'istanza di Form1 chiamante (che provvede poi ad assegnarne il valore a se stessa); nel codice che risponde al clic sul pulsante, viene infatti utilizzato tale riferimento per modificare il contenuto della casella di testo dimostrativa sulla form chiamante Form1.

    Per poter accedere ad un controllo presente su un altro form, è necessario ricordarsi di attribuire a quest'ultimo un adeguata visibilità (Public) intervenendo sulla proprietà Modifiers.

    Cerca di interpretare il significato delle porzioni significative di codice.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Homepage | Blog | Delphi Podcast | Altri link...

  3. #3
    Ti ringrazio molto per l'aiuto

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 © 2020 vBulletin Solutions, Inc. All rights reserved.