试图从ListBox中获取结构数据

时间:2013-09-20 21:08:38

标签: c# winforms struct listbox

我正在使用Timer控件,我希望将间隔设置为等于ListBox中对象的Proc_BurstTime。我无法弄清楚如何解决这个问题。

问题是,我在ListBox中有多个不同的对象;我想要做的是让程序通过列表中每个对象的Proc_BurstTime。

例如,我有一个ProgressBar。 ListBox中有5个具有这些Proc_BurstTime值的内容(以ms为单位): 5000 4000 1000 7000 2000 程序应该转到ListBox中的第一个对象,将进度条设置为“加载”X秒(Proc_BurstTime)。第一个将是5000毫秒(5秒),进度条将在5秒内从0变为100,一旦完成,它将进入下一个,4000毫秒;等等。

我的问题是:

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

这是我得到的错误
*'object'不包含'Proc_BurstTime'的定义,也没有扩展方法'Proc_BurstTime'接受类型'object'的第一个参数(你是否缺少using指令或汇编引用?)*

这是我的结构和初始化:

    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);
        }
    }

1 个答案:

答案 0 :(得分:2)

您必须将其转换为适当的类型:

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

或者,如果您必须访问多个属性,您可能希望这样做:

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

请注意,如果您循环遍历ListBox中的进程,则可以方便地在foreach - 循环的头部声明迭代器的类型:

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