2013-12-05 2 views
1

Я относительно новичок в C# (WinForms) и задал вопрос о комбинированных ящиках. У меня есть поле со списком объектов Рецензента (это пользовательский класс с переопределенным методом ToString), и в настоящее время я пытаюсь пройти через все отмеченные элементы и использовать их для создания установочного файла.C# пользовательский объект в combobox

Вот как заполняется поле со списком (заполняется при загрузке формы). Параметры - это всего лишь набор связанных списков и кода синтаксического анализа.

 for (int i = 0; i < parameters.GetUsers().Count; i++) 
     { 
      UserList.Items.Add(parameters.GetUsersArray()[i], parameters.GetUsersArray()[i].isSelected()); 
     } 

Вот как я пытаюсь его прочитать. setup - это StringBuilder. Проблема в том, что GetID не определен. Предоставляет ли функция add над объектом Рецензента объект Object? Это выглядит немного забавно, так как он создает файл, загруженный в Perl-скрипт. Образец требуемая выходная линия выглядит следующим образом: inspector0 => "chg0306",

 for (int i = 0; i < UserList.CheckedItems.Count; i++) 
     { 
      setup.AppendLine("inspector" + i.ToString() + " => \t \"" + 
       UserList.CheckedItems[i].GetID() + "\","); 
     } 

Вот класс пользователей: (Sample Пользователь ID = имя aaa0000: Боб Джо)

public class Reviewer 
{ 
    private string name; 
    private string id; 
    private bool selected; 

    public Reviewer(string newName, string newID, bool newSelected) 
    { 
     name = newName; 
     id = newID; 
     selected = newSelected; 
    } 
    public string GetName() 
    { 
     return name; 
    } 
    public override string ToString() 
    { 
     //string retVal = new string(' ', id.Length + name.Length + 1); 
     string retVal = id + '\t' + name; 
     return retVal; 
    } 
    public string GetID() 
    { 
     return id; 
    } 
    public bool isSelected() 
    { 
     return selected; 
    } 
} 

Для потомков , вот список параметров:

public class ParameterLists 
{ 
    public ParameterLists() 
    { 
     projects = new LinkedList<string>(); 
     reviewers = new LinkedList<Reviewer>(); 
    } 
    public enum FileContents { 
     PROJECT_LIST, 
     USERS_LIST, 
    } 
    public LinkedList<Reviewer> GetUsers() 
    { 
     return reviewers; 
    } 
    public LinkedList<string> GetProjects() 
    { 
     return projects; 
    } 
    public Reviewer[] GetUsersArray() 
    { 
     Reviewer[] userArray = new Reviewer[reviewers.Count]; 
     reviewers.CopyTo(userArray, 0); 
     return userArray; 
    } 
    public string[] GetProjectsArray() 
    { 
     String[] projectArray = new String[projects.Count]; 
     projects.CopyTo(projectArray, 0); 
     return projectArray; 
    } 

    public void LoadParameters(string fileName) 
    { 
     //Reads the parameters from the input file. 
    } 
    private void CreateDefaultFile(string fileName) 
    { 
     // Create the file from the defaultfile , if it exists. 
     // Otherwise create a blank default file. 
    } 

    private LinkedList <string> projects; 
    private LinkedList <Reviewer> reviewers; 
} 

У меня, вероятно, отсутствует что-то простое, исходящее из встроенного C++. Любая помощь будет оценена по достоинству.

ответ

1

Вы должны бросить этот объект:

((Reviewer)UserList.CheckedItems[i]).GetID() 
+0

я чувствую своего рода немой, но это, кажется, работает. Это, похоже, подтвердит мою теорию о том, что она хранит ее как объект, а не рецензент. Благодаря! – user3071872

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