Как я могу получить доступ к TextBox "textBox2" из класса "Program"? - PullRequest
0 голосов
/ 20 января 2012

Как видите, имена классов, которые я использовал, являются именами классов по умолчанию, сгенерированными Visual C #. Как я могу изменить значения в TextBox с именем "textBox2" (этот TextBox уже находится в дизайне Form1) из класса "Program"? Я перепробовал много вещей, и каждая попытка привела к появлению этой ошибки (или аналогичной ей): An object reference is required for the non-static field, method, or property 'WindowsFormsApplication1.Form1.textBox2'

Пожалуйста, если можете, постарайтесь, чтобы ваши ответы были простыми, спасибо.

Ответы [ 4 ]

1 голос
/ 20 января 2012

Для этого вам понадобится экземпляр вашего Form1.

Form1 frm = new Form1();

Затем вам нужно будет создать публичный метод для доступа к вашему текстовому полю, потому что это приватный член.

Form1.cs:

public void UpdateText(string newValue)
{
    this.textbox2.Text = newValue;
}

Наконец:

frm.UpdateText("new text");
1 голос
/ 20 января 2012

Во-первых, вы, как правило, не должны обращаться к элементам управления, таким как текстовые поля, из вашего класса Program.Вместо этого вы должны сделать это в файле Form1.cs.Form1 является классом, и у него есть защищенное поле для textBox2, поэтому он недоступен вне класса.Если вы хотите изменить значение из Program.cs, вы должны добавить публичную функцию в Form1, которая устанавливает значение textBos2.Text.

Во-вторых, вы, похоже, просто набираете имена классов вместо имениэкземпляр.Разница в том, что Textbox - это класс, textBox1 и textBox2 - это экземпляры.Textbox.Text недопустим, потому что вам нужно указать, для какого текстового поля вы пытаетесь получить или установить текст.То же самое с Form1.textBox2.Form1 - это класс, и их может быть много.Вы должны указать имя экземпляра формы для доступа к его открытым членам.

ОБНОВЛЕНИЕ:

Я просто собираюсь дать вам краткое объяснениеРазница между классом и экземпляром класса, статические поля и нестатические поля.Прошу прощения за любую многословность.

Когда вы создаете новое приложение Windows Forms, Visual Studio создаст для вас тип Form1.Form1 это класс.Затем программа использует Form1 для создания экземпляра формы и его отображения.Код будет выглядеть примерно так:

Form1 form = new Form1;

В этом случае форма является экземпляром.Вы можете создать несколько экземпляров Form1.Каждый экземпляр будет иметь созданный вами textBox2, который является экземпляром класса Textbox.Точно так же, как вы должны сделать textBox2.Text, чтобы получить текст второго текстового поля, которое вы создали в форме, вы должны указать form.textBox2 (или ваш публичный метод, который устанавливает значение textBox2.Text).Form1, хотя у него есть номер после класса, а форма - это экземпляр.Они имеют те же отношения, что и Textbox и textBox2.

Нестатические члены доступны для экземпляра.Статические члены доступны для класса.Статический член не может получить доступ к нестатическому члену, если он не через экземпляр.

1 голос
/ 20 января 2012

Вы должны создать новый экземпляр класса Form1.
Вы не можете "достичь" нестатической переменной без new()

var form1 = new Form1();
form1.textBox2.Text= "aaa";
0 голосов
/ 20 января 2012

Сделать textBox2 общедоступным или внутренним.Для этого настройте его свойство Modifier в конструкторе (Свойства).Затем сделайте это в Main из класса «Program»:

    Form1 f = new Form1();
    f.textBox2.Text = "sdfsdf";
    Application.Run(f);

В любом случае, это абсолютно плохой дизайн. Скажите, почему вы этого хотите, мы поможем решить реальную проблему.

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