4

我有 2 个表格(Form1 和 Form2)和一个班级(Class1)。Form1 包含一个按钮 (Button1),Form2 包含一个 RichTextBox (textBox1) 当我在 Form1 上按下 Button1 时,我希望调用方法 (DoSomethingWithText)。我不断收到“NullReferenceException - 对象引用未设置为对象的实例”。这是一个代码示例:

表格1:

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()
        } 
   }  
}  

第一类:

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

如何从类中调用此方法?任何帮助是极大的赞赏。

4

5 回答 5

11

您必须实例化c1f2。试试这个:

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

更新

正如 Keith 所指出的,因为您正在实例化 的新版本Form2,所以富文本框将永远不会显示 blah blah blah 代码。我已更新示例以解决此问题。

于 2009-07-21T07:49:22.830 回答
3

在您尝试使用 Class1 之前,您还没有实例化它的实例

你需要这样做:

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

不,我还添加了将 frm2 传递给 DoSomethingWithText 方法以供它使用(否则您最终会遇到另一个类似的异常,因为 f2 尚未在该类中实例化。

于 2009-07-21T07:52:39.530 回答
1

您永远不会初始化 cl (或 f2 )。

于 2009-07-21T07:50:46.163 回答
1

要么先实例化(参见@Ray Booysen 的回答),要么将其转换为静态方法:

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

然后:

 frm2 = new Form2();
 Class1.DoSomethingWithText( frm2 );
 frm2.Show();
于 2009-07-21T08:01:16.580 回答
0

您需要将 DoSomethingWithText 声明为静态类或实例化对 Class1 的引用。

public static void DoSomethingWithText()           
  {                
    //Code goes here;           
  }
于 2009-07-21T07:49:58.770 回答