有人知道我怎么写“ cardImage1.BorderStyle = BorderStyle.Fixed3D;”。无需显式声明“ cardImage1”?

我正在尝试将其放入一种方法中,这样,当单击一个图片框时,对于每个单个图片框(有52个!),我无需编写代码即可在两个边框样式之间切换。

例如对于当前的每个框,我都需要在其_click事件中包含以下内容。

        if (cardImage1.BorderStyle == BorderStyle.None)
        {
            cardImage1.BorderStyle = BorderStyle.Fixed3D;
        }
        else
        {
            cardImage1.BorderStyle = BorderStyle.None;
        }

最佳答案

您可以编写一个方法来处理所有图片框的点击,而不是为每个图片框创建处理程序:

 protected void onClickHandler(object sender, EventArgs e)
 {
    if (((PictureBox)sender).BorderStyle == BorderStyle.None)
    {
        ((PictureBox)sender).BorderStyle = BorderStyle.Fixed3D;
    }
    else
    {
        ((PictureBox)sender).BorderStyle = BorderStyle.None;
    }

}


您还可以编写一个循环以遍历窗体上的所有控件,并将事件处理程序附加到所有图片框(如果可能的话,在您的情况下)

// in your form load event do something like this:
foreach(Control c in this.Controls)
{
    PictureBox pb = c as PictureBox;
    if(pb != null)
       pb.Click += new EventHandler(onClickHandler); // where onClickHandler is the above function
}


当然,如果窗体上还有其他图片框,则解决方案是将您感兴趣的52个图片框放在面板中,然后而不是遍历窗体中的所有控件(this.Controls),而仅遍历控件在面板中(thePanelControl.Controls)

关于c# - 使用方法切换BorderStyle。 C#,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1393850/

10-09 05:13