winforms - 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;
}
}
解决方案
如果我们在这条线上做一个假设:
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 的同一个父级上查找一个标签。如果存在,那么它将图片框控件移动到标签的位置。
推荐阅读
- r - 用字符串包删除和替换观察结果
- java - 在 Java 中找不到 Dagger 组件错误?
- performance - 在 x86 中设置和清除零标志
- python - MyBinder.Org - Jupyter Notebook 交互功能未显示
- java - 零钱计算器减一
- sql - SQL Postgres比较同一张表中的数据
- android - Android Place Autocomplete Fragment:无法设置文本
- css - 反应:无法读取 document.body.style.marginRight
- regex - Notepad++ RegEx 查找/替换指定的组和反向引用
- hive - 在 HIVE 中取消组合/分解