Проблема программирования при применении текста к стороннему элементу управления - PullRequest
2 голосов
/ 28 апреля 2010

Я использовал некоторые сторонние элементы управления в моем приложении Windows.

В нашем коде используется фрагмент, который повторно инициализирует все свойства .text всех элементов управления в форме.

Все отлично работает, кроме элемента управления. Этот элемент управления похож на панель Windows, за исключением того, что он имеет выпадающий вид. Этот элемент управления имеет свойство .Caption вместо свойства .Text, связанного с ним.

Это вызывает проблему всякий раз, когда я использую такие коды

foreach (Control oControl in this.Controls)
{
    if (oControl is DropDownPanel)
    {
       {
          oControl.Text = rm_ResourceManager.GetString(oControl.Name + ".Text");
       }
    }
}

Текст здесь не задан для элемента управления DropDownPanel в вышеуказанном методе. Поскольку .Text недоступен для элемента управления DropDownPanel.

Я тоже не могу сделать следующее ..

((DropDownPanel)oControl).Caption = rm_ResourceManager.GetString(oControl.Name + ".Text");

Потому что он выдаст исключение, если я попытаюсь разыграть oControl с DropDownPanel

Любые идеи, как я могу преодолеть такое условие.

Привет

Ответы [ 3 ]

2 голосов
/ 28 апреля 2010

Используя ключевое слово as, вы можете сделать что-то вроде этого.

foreach (Control oControl in this.Controls) 
{ 
    DropDownPanel ddp = oControl as DropDownPanel;

    if (ddp != null) 
    { 
        ddp.Caption = rm_ResourceManager.GetString(oControl.Name + ".Text"); 
    }
    else
    {
        TextBox tb = oControl as TextBox;

        if (tb != null)
        {
            tb.Text = rm_ResourceManager.GetString(oControl.Name + ".Text"); 
        }
    }
} 

Это ТОЛЬКО устанавливает свойство Caption для DropDownPanels и свойство Text для TextBoxes. Если вам нужно сделать это или любой другой тип элемента управления, вам необходимо добавить дополнительные блоки / / / /, но я бы не рекомендовал это.

Я бы предложил переосмыслить подход. Вам может понадобиться точный список элементов управления, для которых необходимо очистить их текст, или вы можете использовать какой-то другой шаблон, но мы не можем сказать об ограниченной информации, которую вы представили.

1 голос
/ 28 апреля 2010

Это управление Telerik?Его класс DropDownPanel не наследуется от Control, его нельзя добавить в коллекцию Controls.Это объясняет, почему заголовок не установлен и почему вы не можете привести.

Просмотрите документацию API, должен быть какой-то другой класс коллекции, который позволяет вам перебирать элементы RadElement, присутствующие в форме.Лучшее место для поиска других программистов, которые использовали этот продукт, - на форуме поддержки .

0 голосов
/ 28 апреля 2010

Более подходящим решением было бы использование адаптера вокруг DropDownPanel. Этот адаптер будет реализовывать весь интерфейс Control, перенаправляя его на адаптер DropDownPanel, за исключением свойства Text, которое реализуется в терминах свойства Caption адаптера.

При создании экземпляра графического интерфейса пользователя вы должны обернуть DropDownPanel в адаптер.

Таким образом, вы можете одинаково относиться к элементам управления, сохраняя чистоту кода и снижая уровень связи: ответственность за обеспечение равного интерфейса для каждого компонента лежит на gui-buider, а ответственность foreach цикл, чтобы сделать что-то для всех компонентов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...