2013-03-11 4 views
1

Я создал текстовое поле и хочу ссылаться на него в статическом метаде. Как мне это сделать? здесь, мой кодкак ссылаться на нестационарный объект в статическом методе

private void Form1_Load(object sender, EventArgs e) 
    { 
     TextBox textbox2 = new TextBox(); 
     textbox2.Text = "A"; 
    } 

    static void gettext() 
    { 
     textbox2.Text = "B"; //here is my problem 
    } 
+0

Вы не можете. Вам нужен объект. –

+2

Также обратите внимание, что в вашем коде текстовое поле2 в Form1_Load является локальным для метода, а не для класса. Определить текстовое поле textbox2 вне Form1_Load – rene

+0

http://stackoverflow.com/questions/498400/an-object-reference-is-required-for-the-nonstatic-field-method-or-property-wi –

ответ

7

Вы должны были бы передать его в статический метод как-то, самый простой вариант, чтобы просто расширить сигнатуру методы, чтобы принять текстовое поле:

static void gettext(TextBox textBox) 
{ 
    textBox.Text = "B"; //here is my problem 
} 
+0

спасибо. это сработало. – user1853846

+0

@ user1853846 Не забудьте принять ответ, который вы считаете лучшим (в данном случае, Lloyd's) – Nolonar

+1

@ user1853846 Если вы не знаете, как принимать ответы или почему вы должны это сделать: http: // meta .stackexchange.com/questions/5234/how-do-accepting-a-answer-work – Nolonar

2

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

// private variable 
private TextBox textbox2; 

private void Form1_Load(object sender, EventArgs e) 
{ 
    // refers to private instance variable 
    textbox2 = new TextBox(); 
    textbox2.Text = "A"; 
} 

private void gettext() 
{ 
    // refers to private instance variable 
    textbox2.Text = "B"; 
} 

Если у вас возникли трудности с пониманием static, наверняка вы не должны использовать его. Статические элементы доступны для всех экземпляров класса, но не принадлежат ни одному из них, что означает, что статические методы не могут получить доступ к закрытым членам.

+1

Зачем это произошло? Он не использует методы 'static', но, насколько я вижу, это полностью верный ответ, я что-то упускаю? – Nolonar

+1

также не уверен, почему (он напрямую не отвечает на явный вопрос, да, но он, безусловно, дает то, что, вероятно, лучший и самый полезный ответ, на мой взгляд) +1 – baldric

4

Вы должны дать свой текстовое поле в качестве параметра для статического метода

static void gettext(TextBox textbox) 
{ 
    textbox.Text = "B"; 
} 
2

Вы можете сделать так

static void gettext(TextBox textbox2) 
{ 
    textbox2.Text = "B"; 
} 

И в коде

private void Form1_Load(object sender, EventArgs e) 
{ 
    YourClass.gettext(textbox2); 
} 
-1

Вы можете создать статическую переменную на заказ:

private static readonly TextBox _textBox = new TextBox(); 

private void Form1_Load(object sender, EventArgs e) 
{ 
    _textBox.Text = "A"; 
} 

static void gettext() 
{ 
    _textbox2.Text = "B"; 
} 
+0

TextBox является readonly и никогда не переназначается, только свойство Text , Если вы предпочитаете, вы удаляете readonly и создаете TextBox в методе Load. – Toto

Смежные вопросы