我有一个项目,单击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;
}
}
答案 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控件移动到标签的位置。