按名称获取控件句柄

时间:2011-05-31 21:24:34

标签: visual-studio-2008 user-controls c#-3.0 handle

我有一个带有几个PictureBox的UserControl。这些是UserControl上的唯一控件。所有PictureBox都被命名为'pbx'加上一种颜色,如'pbxGrey'或'pbxBlack'。我有一个方法,选择一个PictureBoxes并更改BorderStyle以表示它已被选中。我试图使用this.Controls [“pbx”+ color]方法但没有设置BorderStyle的属性。

    public void SelectColor(string color)
    {
        ClearBorderSyles();
        this.Controls["pbx" + color]. //No BorderStyle property
        SelectedColor = color;
    }

我也试过这个来获得相同的属性:

    public void SelectColor(string color)
    {
        ClearBorderSyles();
        Picturebox handle = new PictureBox();
        handle = this.Controls["pbx" + color];
        SelectedColor = color;
    }

在此示例中,VS表示我无法 implcitly 将Control转换为PictureBox。所以我需要知道的是如何处理控件以便我可以更改BorderStyle?请在C#中回答,或在必要时在VB中回答。谢谢。

1 个答案:

答案 0 :(得分:0)

您应该尝试使用强制转换运算符:

此外,如果您计划将新对象丢弃到下一行,则不应为handle分配新对象:

我会建议像:

if(this.Controls["pbx" + color] is PictureBox)
{
   PictureBox handle = this.Controls["pbx" + color] as PictureBox;
}

或:

using(PictureBox handle = this.Controls["pbx" + color] as PictureBox)
{
     ...
}

当然,在尝试分配或使用之前,您应该检查控件是否为空。 但是你明白了。