C# 试图使picturebox接受int作为数字
我正在尝试对pictureboxes执行以下操作: 搜索具有特殊图像的picturebox,我的方法返回具有此图像的框的编号 例如:C# 试图使picturebox接受int作为数字,c#,.net,winforms,picturebox,C#,.net,Winforms,Picturebox,我正在尝试对pictureboxes执行以下操作: 搜索具有特殊图像的picturebox,我的方法返回具有此图像的框的编号 例如: if (picturebox1.Tag == "special") { return 1; //returns value 1 as in picturebox1 contains it. } 现在,当我单击pictureBox2时,我希望它与包含特殊图片的picturebox切换(我总共有10个包含图片的picturebox,只有一个框包含特殊图片)
if (picturebox1.Tag == "special") {
return 1; //returns value 1 as in picturebox1 contains it.
}
现在,当我单击pictureBox2时,我希望它与包含特殊图片的picturebox切换(我总共有10个包含图片的picturebox,只有一个框包含特殊图片)
单击picturebox2上的事件:
private void pictureBox2_Click(object sender, EventArgs e)
{
performSwitch(2); //2 meaning picturebox "2"
}
它调用的方法:
public void performSwitch(int pictureBoxWaarde)
{
switch (pictureBoxWaarde)
{
case 2:
pictureBox10.Image = pictureBox2.Image; //else picture overwrites
pictureBox2.Image = pictureBox1.Image;
pictureBox1.Image = pictureBox10.Image;
break;
}
}
这段代码是有效的,但是我不想对每个组合都使用大量的if-else语句。。因此,要使其“智能化”,我需要这样的东西:
public void performSwitch(int pictureBoxWaarde)
{
switch (pictureBoxWaarde)
{
pictureBox10.Image = pictureBox2.Image; //else picture overwrites
pictureBox2.Image = pictureBox"+findBlackBox+".Image;
pictureBox"+findBlackBox()+".Image = pictureBox10.Image;
break;
}
}
如果这将工作,它将获得特殊的箱号和工作,而无需大量的If-else。我该怎么做 我不确定我是否完全理解您试图实现的目标,但您总能通过名称找到控件 假设您有一个变量
字符串m_specialPictureBoxName代码>始终包含当前特殊图片框的名称,您可以执行以下操作:
public void performSwitch(int pictureBoxWaarde)
{
// Get current special picture box
PictureBox currentSpecial = this.Controls.Find(m_specialPictureBoxName, true) as PictureBox;
// Get new special picture box
m_currentPictureBoxName = String.Format("pictureBox{0}", pictureBoxWaarde);
PictureBox clicked = this.Control.Find(m_currentPictureBoxName, true) as PictureBox;
// Swap images
Image temp = currentSpecial.Image;
currentSpecial.Image = clicked.Image;
clicked.Image = temp;
}
另外,我在不使用临时pictureBox10
分配的情况下交换图像-我不确定您是否希望pictureBox10
获取图像。如果这样做,可以用以前的代码替换它,而不是Image temp=…
行
将所有PictureBox事件处理程序分配给单个方法
这样写方法
private void ApictureBox_Click(object sender, EventArgs e)
{
var clickedPicture = sender as PictureBox;
// iterate through all picture controls of the current form
for (var pic in this.Controls.OfType<PictureBox>())
if (pic.Tag=="special")
{
var temp = clickedPicture.Image;
clickedPicture.Image = pic.Image;
pic.Image = temp;
}
}
private void ApictureBox\u单击(对象发送方,事件参数e)
{
var clickedPicture=发送者作为PictureBox;
//遍历当前窗体的所有图片控件
for(此.Controls.OfType()中的var pic)
如果(图片标签==“特殊”)
{
var temp=点击图片。图片;
点击picture.Image=pic.Image;
图片图像=温度;
}
}
对于第一步,您可以手动执行,也可以使用类似的循环在表单构造函数中分配事件处理程序。谢谢您的评论!你能告诉我如何在我的例子中使用这个代码吗?谢谢在事件私有无效pictureBox2\u单击(对象发送方,EventArgs e)时,发送方就是pictureBox2,如果将其强制转换为PictureBox,则可以将其用作设置为pictureBox10的源