Как я могу использовать метод из класса, созданного в другой форме? - PullRequest
0 голосов
/ 31 октября 2011

У меня есть класс instaciaded в Form1, и я хочу назвать его Form2 это возможно?

Например:

public TheClass thClass; //member from Form1

/* ... */ 

public void foo() { 
       thClass = new TheClass(...);
} 

Форма 2:

public void baa() { 
        Form1 form1 = new Form1();
        form1.thClass.MethodName( .. ) ;
}

Я получаю следующую ошибку при вызове метода .baa() в Form2:

Object reference not set to an instance of an object.

Какой лучший способ сделать это? ref? Я хочу, чтобы это снова не создавалось для класса.

Надеюсь, это понятно. Заранее спасибо.

Ответы [ 4 ]

2 голосов
/ 31 октября 2011

Вы получаете это исключение, потому что thClass равно null - в вашем примере вы должны вызвать foo() перед использованием thClass.

Поля ссылочного типа не являются чем-то особенным - к ним можно получить доступкак и любое другое открытое поле класса (а Form1 - это класс).Как правило, вы хотите использовать вместо этого свойство и избегать открытых полей, так как любое изменение в них нарушит существующих потребителей - свойство, которое может быть установлено только тем классом-владельцем, который вы можете выразить как

public TheClass SomeClass {get; private set;}
0 голосов
/ 31 октября 2011

Лучший способ сделать это - передать экземпляр TheClass в Form1 конструктору Form2.

// Code from Form 1
public partial class Form1 : Form
{
    private TheClass thClass;
    public Form1()
    {
        InitializeComponent();
    }
    public void foo()
    { 
        thClass = new TheClass(...);
    }
    private void button1_Click(object sender, EventArgs e)
    {
        Form2 objForm2 = new Form2(thClass);
        objForm2.Show();
    }
}

// Code From Form 2
public partial class Form2 : Form
{
    private TheClass thClass;
    public Form2(TheClass thCls)
    {
        thClass = thCls;
        InitializeComponent();
    }

    private void baa(object sender, EventArgs e)
    {
        thClass.MethodName( .. );
    }
}
0 голосов
/ 31 октября 2011

поскольку вы инициализируете thClass в методе foo, вы просто вызываете метод перед использованием thClass

public void baa() { 
        Form1 form1 = new Form1();
        form1.foo();
        form1.thClass.MethodName( .. ) ;
}

или можете инициализировать напрямую

public void baa() { 
        Form1 form1 = new Form1();
        form1.thClass = new TheClass(...);
        form1.thClass.MethodName( .. ) ;
}
0 голосов
/ 31 октября 2011

Вы должны вызвать Foo () для инициализации thClass ....

public void baa() { 
    Form1 form1 = new Form1();
    form1.foo();
    form1.thClass.MethodName( .. ) ;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...