Calling a method from within a Class

2019-05-16 08:52发布

I have 2 Forms (Form1 and Form2) and a class (Class1). Form1 contains a button (Button1) and Form2 contains a RichTextBox (textBox1) When I press Button1 on Form1, I want the method (DoSomethingWithText) to be called. I keep getting "NullReferenceException - Object reference not set to an instance of an object". Here is a code example:

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";
           }
      }
}

How can I call this method from within a class? Any help is greatly appreciated.

5条回答
Deceive 欺骗
2楼-- · 2019-05-16 09:27

You have to instantiate c1 and f2. Try this:

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

As Keith has pointed out, because you're instantiating a new version of Form2, the rich textbox will never show the blah blah blah code. I've updated the sample to fix this.

查看更多
Deceive 欺骗
3楼-- · 2019-05-16 09:31

You are never initializing cl (or f2 for that matter).

查看更多
Anthone
4楼-- · 2019-05-16 09:40

Either instantiate first (see @Ray Booysen's answer) or convert it to a static method:

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

Then:

 frm2 = new Form2();
 Class1.DoSomethingWithText( frm2 );
 frm2.Show();
查看更多
来,给爷笑一个
5楼-- · 2019-05-16 09:41

You haven't instantiated an instance of Class1 before you've tried to use it

You'd need to do:

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

Not I've also added in the passing of frm2 in to the DoSomethingWithText method for it to then use (else you'd end up with another similar exception as f2 hasn't been instantiated in that class.

查看更多
姐就是有狂的资本
6楼-- · 2019-05-16 09:44

You need to either declare DoSomethingWithText as a static class or instantiate the reference to Class1.

public static void DoSomethingWithText()           
  {                
    //Code goes here;           
  }
查看更多
登录 后发表回答