将listview子项转换为double

时间:2015-04-15 19:11:50

标签: c# winforms user-interface listview formatexception

我正在C#上创建一个进程调度计算器,我创建了listviews 1用于输入,一个用于调度本身,但是当我开始编码FCFS调度部分时,我无法将突发时间子项转换为double,所以我可以在这里添加等待时间是代码的一些部分和表单的截图

 public void button1_Click(object sender, EventArgs e)
 {
    if (textBox1.Text == "" || textBox2.Text == "" || textBox3.Text == "")
    {
        MessageBox.Show("Insert the required in the boxes");
    }
    else
    {
        ListViewItem Process = new ListViewItem(textBox1.Text);
        Process.SubItems.Add(textBox2.Text);
        Process.SubItems.Add(textBox3.Text);
        Process.SubItems.Add(textBox4.Text);
        listView1.Items.Add(Process);
        textBox1.Text = "";
        textBox2.Text = "";
        textBox3.Text = "";
        textBox4.Text = "";
    }
}

private void button2_Click(object sender, EventArgs e)
{
    double temp = 0;

    //First Come First Served
    if (comboBox1.Text == "FCFS")
    {
        for (int i = 0; i < listView1.Items.Count; i++)
        {
            ListViewItem WaitingTime = new ListViewItem(listView1.Items[i].Text);
            //temp = Convert.ToDouble(listView2.Items[i].SubItems[0]) + Convert.ToDouble(listView2.Items[i + 1].SubItems[0]);
            if (listView2.Items.Contains(WaitingTime))
            {
                WaitingTime.SubItems.Add(temp.ToString());
                listView2.Items.Add(WaitingTime);
            }
            else
            {
                WaitingTime.SubItems.Add(temp.ToString());
                listView2.Items.Add(WaitingTime);
            }
        }
    }

    //SJF Non-preemptive
    if (comboBox1.Text == "SJF non-preemptive")
    {
        for (int i = 0; i < listView1.Items.Count; i++)
        {
            listView2.Items.Add(listView1.Items[i].Text);
        }
    }
}

enter image description here

我尝试了几次并搜索了几种形式,我得到的只是FormatExpection。

1 个答案:

答案 0 :(得分:1)

Subitems [0]将保存第一个子元素,它与项目的Text相同,也不能将ListViewItem.Subitem转换为文本,需要使用Text属性。

所以你需要使用:

listView2.Items[i].SubItems[1].Text 

在你的转换中,我也建议使用Double.TryParse而不是Convert.ToDouble,它会更快,并会告诉你它是否被解析。