2013-09-20 3 views
0

Я использую элемент управления Timer, и я хочу установить интервал, равный Proc_BurstTime объекта в ListBox. Я не могу понять, как я могу это сделать.Попытка получить данные структуры из ListBox

Дело в том, что у меня есть несколько вещей, которые разные объекты в ListBox; я хочу, чтобы программа проходила через Proc_BurstTime каждого объекта в списке.

Так, например, у меня есть ProgressBar. Есть 5 вещей, которые в ListBox с этими значениями Proc_BurstTime (в мс): Программа должна перейти к первому объекту в ListBox, установите индикатор на «нагрузки» для X секунд (Proc_BurstTime). Первый будет составлять 5000 мс (5 секунд), индикатор выполнения будет идти от 0 до 100 за 5 секунд, после его завершения он перейдет к следующему, 4000 мс; так и так далее.

Мой вопрос заключается в следующем:

timer1.Interval = initial_ProcessList.Items[0].Proc_BurstTime; 

Это ошибка я получаю
* «объекта» не содержит определение для «Proc_BurstTime» и нет методы расширения «Proc_BurstTime» принимая первый аргумент типа «объект» может быть найдено (вы пропали без вести с помощью директивы или ссылка на сборку?) *

Это моя структура и инициализация:

struct process 
    { 
     public int Proc_Id; 
     public int Proc_BurstTime; 
     public int Proc_Priority; 
     public override string ToString() 
     { 
      return "ID: " + Proc_Id.ToString() + " Time: " + Proc_BurstTime.ToString() + " Prior: " + Proc_Priority.ToString(); 
     } 
    }; 

    readonly process[] ProcessList = new process[] 
    { 
     new process{ Proc_Id = 1, Proc_BurstTime = 5000, Proc_Priority = 1}, 
     new process{ Proc_Id = 2, Proc_BurstTime = 4000, Proc_Priority = 2}, 
     new process{ Proc_Id = 3, Proc_BurstTime = 1000, Proc_Priority = 3}, 
     new process{ Proc_Id = 4, Proc_BurstTime = 7000, Proc_Priority = 4}, 
     new process{ Proc_Id = 5, Proc_BurstTime = 2000, Proc_Priority = 5} 
    }; 

И это, как я добавляю вещи к ListBox:

private void Form1_Load(object sender, EventArgs e) 
    { 
     foreach (var p in ProcessList) 
     { 
      initial_ProcessList.Items.Add(p); 
     } 
    } 
+0

Вы можете отметить, что [ListBox.ObjectCollection.Item Property] (http://msdn.microsoft.com/ en-us/library/system.windows.forms.listbox.objectcollection.item.aspx) возвращает объект. В стороне вы можете проверить [Почему изменчивые структуры злы?] (Http://stackoverflow.com/q/441309/119477) –

ответ

2

Вы должны были бы привести его к соответствующему типу:

timer1.Interval = ((process)initial_ProcessList.Items[0]).Proc_BurstTime; 

Или если у вас есть доступ к нескольким свойств , вы, вероятно, хотите сделать это:

process proc = (process)initial_ProcessList.Items[0]; 
timer1.Interval = proc.Proc_BurstTime; 

Обратите внимание, что если вы перекручивание через процессы в ListBox, вы можете удобно объявить тип итератора в голове вашего foreach -loop:

foreach (process proc in initial_ProcessList.Items) 
{ 
    timer1.Interval = proc.Proc_BurstTime; 
    ... 
} 
+0

Даже не осознавал, что это так просто ... Большое спасибо! – Evan

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