Domanda

Ho 2 Form (Form1 e Form2) e una classe (Class1). Form1 contiene un pulsante (Button1) e Form2 contiene un RichTextBox (textBox1) Quando premo Button1 in Form1, voglio che il metodo (DoSomethingWithText) per essere chiamato. Continuo a ricevere "NullReferenceException - riferimento oggetto non impostato a un'istanza di un oggetto". Ecco un esempio di codice:

Form1:

namespace Test1
{  
    public partial class Form1 : Form  
    {
        Form2 frm2;

        Class1 cl;

        public Form1()  
        { 
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            frm2 = new Form2(); 
            cl.DoSomethingWithText();
            frm2.Show()
        } 
   }  
}  

Class1:

namespace Test1
{
      class Class1
      {
           Test1.Form2 f2;
           public void DoSomethingWithText()
           {
                f2.richTextBox1.Text = "Blah blah blah";
           }
      }
}

Come posso chiamare questo metodo all'interno di una classe? Ogni aiuto è molto apprezzato.

È stato utile?

Soluzione

Dovete istanziare c1 e f2. Prova questo:

public partial class Form1 : Form  
{
    Form2 frm2;
    Class1 cl;
    public Form1()  
    {  
        c1 = new Class1();
        InitializeComponent();  
    }
    private void button1_Click(object sender, EventArgs e)
    {
      frm2 = new Form2();
      cl.DoSomethingWithText(frm2);
      frm2.Show();
    } 
}

class Class1
{

    public void DoSomethingWithText(Test1.Form2 form)
    {
        form.richTextBox1.Text = "Blah blah blah";
    }
}

UPDATE

Come Keith ha fatto notare, perché si sta istanziare una nuova versione del Form2, il ricco testo non mostrerà mai il bla bla bla codice. Ho aggiornato il campione per risolvere questo problema.

Altri suggerimenti

Non hai un'istanza di un'istanza di Class1 prima di aver provato a usarlo

È avresti bisogno di fare:

private void button1_Click(object sender, EventArgs e)
{
    c1 = new Class1();
    frm2 = new Form2();
    cl.DoSomethingWithText(frm2);
    frm2.Show();
} 

Non Ho anche aggiunto nel passaggio di frm2 nel metodo della DoSomethingWithText per esso quindi utilizzare per (altra cosa che finisce con un'altra eccezione simile a f2 non è stata creata un'istanza in quella classe.

Non si è mai inizializza cl (o F2 per questo).

In entrambi i istanziare prima (vedi risposta di @Ray Booysen) o convertirlo in un metodo statico:

class Class1
{
   public static void DoSomethingWithText( Test1.Form2 f2 )
   {
      f2.richTextBox1.Text = "Blah blah blah";
   }
}

Quindi:

 frm2 = new Form2();
 Class1.DoSomethingWithText( frm2 );
 frm2.Show();

È necessario dichiarare sia DoSomethingWithText come una classe statica o istanziare il riferimento a Class1.

public static void DoSomethingWithText()           
  {                
    //Code goes here;           
  }
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top