Вызов метода из класса - PullRequest
3 голосов
/ 21 июля 2009

У меня есть 2 формы (форма 1 и форма 2) и класс (класс 1). Form1 содержит кнопку (Button1), а Form2 содержит RichTextBox (textBox1). Когда я нажимаю Button1 в Form1, я хочу, чтобы метод (DoSomethingWithText) вызывался. Я продолжаю получать "NullReferenceException - Ссылка на объект не установлена ​​на экземпляр объекта". Вот пример кода:

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

Как я могу вызвать этот метод из класса? Любая помощь с благодарностью.

Ответы [ 5 ]

11 голосов
/ 21 июля 2009

Вы должны создать экземпляры 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";
    }
}

UPDATE

Как указал Кит, поскольку вы создаете новую версию Form2, в расширенном текстовом поле никогда не будет кода бла-бла-бла. Я обновил образец, чтобы исправить это.

3 голосов
/ 21 июля 2009

Вы не создали экземпляр экземпляра Class1 до того, как пытались его использовать

Вам нужно будет сделать:

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

Не я также добавил при передаче frm2 в метод DoSomethingWithText для его последующего использования (в противном случае вы получите еще одно подобное исключение, так как f2 не было создано в этом классе.

1 голос
/ 21 июля 2009

Сначала создайте экземпляр (см. Ответ @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();
1 голос
/ 21 июля 2009

Вы никогда не инициализируете cl (или f2 в этом отношении).

0 голосов
/ 21 июля 2009

Вам нужно либо объявить DoSomethingWithText как статический класс, либо создать ссылку на Class1.

public static void DoSomethingWithText()           
  {                
    //Code goes here;           
  }
...