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

クラス1:

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

クラス内からこのメソッドを呼び出すにはどうすればよいですか? どんな助けでも大歓迎です。

4

5 に答える 5

11

c1およびをインスタンス化する必要がありますf2。これを試して:

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、リッチ テキスト ボックスに何とかコードが表示されることはありません。これを修正するためにサンプルを更新しました。

于 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

最初にインスタンス化するか(@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 に答える
1

cl(またはf2)を初期化することは決してありません。

于 2009-07-21T07:50:46.163 に答える
0

DoSomethingWithText を静的クラスとして宣言するか、Class1 への参照をインスタンス化する必要があります。

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