Получить дескриптор управления по его имени - PullRequest
0 голосов
/ 01 июня 2011

У меня есть UserControl с несколькими PictureBox на нем. Это единственные элементы управления в 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 говорит, что я не могу безразлично преобразовать элемент управления в PictureBox. Так что мне нужно знать, как вы получаете дескриптор элемента управления, чтобы я мог изменить BorderStyle? Пожалуйста, ответьте на C # или VB, если это необходимо. Спасибо.

1 Ответ

0 голосов
/ 01 июня 2011

Вы должны попробовать использовать оператор приведения:

Кроме того, вы не должны назначать 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)
{
     ...
}

Конечно, вы должны проверить, что элемент управления не является нулевым, прежде чем пытаться назначить или использовать, и т. Д. Но выполучить идею.

...