2010-04-23 3 views
0
public class Account 
     { 
      public string Username 
      { 
       get { return Username; } 
       set { Username = value; } 
      } 
     } 


public class ListAcc 
     { 
      static void Data() 
      { 
       List<Account> UserList = new List<Account>(); 
       //example of adding user account 
       Account acc = new Account(); 
       acc.Username = textBox1.Text; //error 
       UserList.Add(acc); 
      } 
     } 

есть ошибка доступа к textBox1.Text? (Ссылка на объект требуется для нестатического поля, метода или свойства) ... Кто-то может помочь?Получите текстовые поля в списке! C#

но если код:

private void textBox1_TextChanged(object sender, EventArgs e) 
    { 
      List<Account> UserList = new List<Account>(); 
      //example of adding user account 
      Account acc = new Account(); 
      acc.Username = textBox1.Text; 
      UserList.Add(acc); 
    } 

это работа! кто-то может помочь мне исправить мою ошибку? Большое спасибо!

ответ

3

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

public class ListAcc 
{ 
      private static List<Account> UserList; 
      public static List<Account> Data() 
      { 
       return UserList; 
      } 
     } 
private void textBox1_TextChanged(object sender, EventArgs e) 
    { 
      UserList = new List<Account>(); 
      //example of adding user account 
      Account acc = new Account(); 
      acc.Username = textBox1.Text; 
      UserList.Add(acc); 
    } 
2

Обратите внимание, что метод Data является статическим и textBox1_TextChanged нет. textBox1 - это переменная экземпляра, она принадлежит определенному экземпляру вашего класса. static относятся к самому классу и не могут видеть переменные экземпляра. static методы не знали бы, с каким экземпляром поговорить.

Почему вы хотите, чтобы метод Data был static?

0

Вы не можете получить доступ к полю/свойство/метода объекта (в данном случае textBox1 из контейнера объекта например объект WinForm) из статического метода без использования ссылки на объект например form1.TextBox1. TextBox1 также, вероятно, закрыт внутри вашего объекта-контейнера, например form1, поэтому вы не сможете получить доступ к нему вне объекта form1 в объекте ListAcc.

Ниже приведен пример кода, который должен работать.

public class ListAcc 
{ 
    // Don't put this in Data or you'll recreate it again and 
    // again when you call Data 
    private static List<Account> UserList = new List<Account>(); 

    // We'll pass in textBox1.Text via name parameter instead of 
    // referencing it directly which we can't 
     public static void Data(string name) 
     { 
      //example of adding user account 
      Account acc = new Account(); 
      acc.Username = name; 
      UserList.Add(acc); 
     } 
} 

private void textBox1_TextChanged(object sender, EventArgs e) 
{ 
    // We'll call Data and pass in textBox1.Text as our UserName 
    ListAcc.Data(textBox1.Text); 
} 

Обратите внимание, что TextChanged событие точно не лучшее место, чтобы поставить свой метод данных, поскольку он поднимается каждый раз, когда вы вводите новый символ/нажмите Backspace/и т.д..

+0

да, я так думаю! так, какой лучший способ получить полную строку во всех текстовых окнах? –

+0

Используйте кнопку и обрабатывайте событие щелчка этой кнопки, чтобы получить текст в каждом текстовом поле и вызвать метод данных. Цикл For будет работать хорошо. – anonymous

0

textBox1 - это переменная объекта, которая относится к объекту объекта, поэтому вам необходимо создать объект (экземпляр) класса ListAcc перед его использованием.

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

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

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