Ошибка при вызове геттера из другого From - PullRequest
0 голосов
/ 13 мая 2011

У меня есть два оператора From (Form1, Form2), и я получаю эту ошибку, когда пытаюсь вызвать открытую функцию Form2 из класса Form1.

Ошибка 1 «System.Windows.Forms.Form» не содержит определения для «getText1», и метод расширения «getText1», принимающий первый аргумент типа «System.Windows.Forms.Form», не найден (есть Вы пропустили директиву using или ссылку на сборку?) C: \ Users ... \ WindowsFormsApplication1 \ WindowsFormsApplication1 \ Form1.cs 24 17 WindowsFormsApplication1.

  public partial class Form1 : Form
  {

    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Form gen = new Form2();
        gen.ShowDialog();
        gen.getText1(); // I'm getting the error here !!!
    }
}

public partial class Form2 : Form
{
    public string Text1;

    public Form2()
    {
        InitializeComponent();
    }

    public string getText1()
    {
        return Text1;
    }

    public void setText1(string txt)
    {
        Text1 = txt;
    }

    private void button1_Click(object sender, EventArgs e)
    {
        this.setText1(txt1.Text);
        this.Close();
    }
}

Есть идеи? Спасибо за вашу помощь.

Ответы [ 3 ]

8 голосов
/ 13 мая 2011

Тип времени компиляции gen в настоящее время просто Form.Измените это, и это должно быть хорошо:

Form2 gen = new Form2();
gen.ShowDialog();
gen.getText1();

Обратите внимание, что это не имеет ничего общего с графическим интерфейсом, в частности - это просто обычный C #.Если вы только начинаете с C #, я предлагаю вам изучить его с помощью консольных приложений - в этом случае гораздо меньше странностей, и вы можете изучать одну вещь за раз.

Я бы порекомендовалвы начинаете следовать соглашениям об именах .NET, используете свойства соответствующим образом и также избавляетесь от форм:

using (Form2 gen = new Form2())
{
    gen.ShowDialog();
    string text = gen.Text1;
}

(Даже тогда Text1 не очень описательное имя ...)

3 голосов
/ 13 мая 2011

Проблема в том, что вы объявили gen в качестве базового типа Form, у которого нет такого метода:

private void button1_Click(object sender, EventArgs e)
{
    Form gen = new Form2();
    gen.ShowDialog();
    gen.getText1(); // I'm getting the error here !!!
}

Вместо этого вам нужно явно определить его как тип Form2 или использовать var, чтобы позволить компилятору выводить тип:

private void button1_Click(object sender, EventArgs e)
{
    var gen = new Form2();
    gen.ShowDialog();
    gen.getText1();  // works fine now
}
2 голосов
/ 13 мая 2011

Попробуйте

Form2 gen = new Form2();         
gen.ShowDialog();         
gen.getText1();

Надеюсь, эта помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...