Winform中类型为'System.InvalidCastException'的未处理异常

时间:2018-07-17 08:18:37

标签: winforms

我有一个项目,单击Button,它将在PictureBox1上创建一个新的PictureBox(pb)。当我在组合框上选择项目时,PictureBox(pb)将出现在我想要的位置,并且出现问题。如何解决此问题或在void comboBox3_SelectedIndexChanged中使用“ pb”。谢谢。

private void btaddagv_Click(object sender, EventArgs e)
    {
        AddNewPictureBox();
    }

    public System.Windows.Forms.PictureBox AddNewPictureBox()
    {

        System.Windows.Forms.PictureBox pb = new System.Windows.Forms.PictureBox();
        pictureBox1.Controls.Add(pb);
        pb.Name = "STT" + tbAdd.Text;
        pb.Image = Image.FromFile("AGV-1.jpg");
        pb.Height = 30;
        pb.Width = 40;
        pb.SizeMode = PictureBoxSizeMode.Zoom;
        pb.Location = new System.Drawing.Point(tdx, 500);
        tdx = tdx + 200;
       return pb;
    } 
private void comboBox3_SelectedIndexChanged(object sender, EventArgs e)
    {
        if(comboBox3.SelectedItem == "A")
        {
            PictureBox pb = (PictureBox)sender;
            pb.Location = lbA.Location;
        }
    }

And here is an error

1 个答案:

答案 0 :(得分:0)

如果我们在这一行做一个假设:

pb.Name = "STT" + tbAdd.Text;

tbAdd.Text包含您在此处检查的A,B,C,D等:

if(comboBox3.SelectedItem == "A")

然后您的SelectedIndexChanged事件处理程序应为:

private void comboBox3_SelectedIndexChanged(object sender, EventArgs e)
{
    string selected = comboBox3.SelectedItem.ToString();
    if (!string.IsNullOrWhitespace(selected))
    {
        PictureBox pb = picturebox1.Controls.OfType<PictureBox>().Where(p => p.Name == $"STT{selected}").FirstOrDefault();
        if (pb != null)
        {
            Label lb = picturebox1.Controls.OfType<Label>().Where(l => l.Name == $"lb{selected}").FirstOrDefault();
            if (lb != null)
                pb.Location = lb.Location;
        }
    }
}

我在这里做了一些额外的假设。首先,我假设您所指的“ lbA”控件是一个标签。第二个假设是lbA和其他控件都共享同一父对象(picturebox1)

上面的操作是获取SelectedItem的值(如果我们在示例中使用字母A),然后尝试查找名称为STTA的任何PictureBox控件。如果找到一个,则在同一个名为lbA的父对象上查找标签。如果存在,则将picturebox控件移动到标签的位置。