试图使一个picturebox接受一个int作为数字

时间:2014-02-04 12:46:53

标签: c# .net winforms picturebox

我正在尝试使用图片框执行以下操作:

搜索具有特殊图像的图片框,我的方法返回一个包含此图像的框。

示例:

if (picturebox1.Tag == "special") {
    return 1; //returns value 1 as in picturebox1 contains it.
}

现在,当我点击pictureBox2时,我想让它用包含特殊图片的图片框切换(我总共有10个带图片的图片盒,只有一个盒子包含特殊图片)

在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语句的TONS。所以为了让它“聪明”,我需要这样的东西:

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即可工作。我该怎么做?

2 个答案:

答案 0 :(得分:0)

我不确定我是否完全明白你想要达到的目标,但你总能找到一个名字的控件。

假设您有一个变量string 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 = ...行。

答案 1 :(得分:0)

  1. 将所有PictureBox事件处理程序分配给单个方法。
  2. 写下这样的方法

    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;
            }
    }
    
  3. 对于第一步,您可以手动执行,也可以使用类似的循环在表单构造函数中分配事件处理程序。