首页 > 解决方案 > winform 中未处理的“System.InvalidCastException”类型异常

问题描述

我有一个项目,我单击按钮,它将在 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;
        }
    }

这是一个错误

标签: winforms

解决方案


如果我们在这条线上做一个假设:

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 的同一个父级上查找一个标签。如果存在,那么它将图片框控件移动到标签的位置。


推荐阅读