ASP.NET 4.0: возможно ли сделать дочерние элементы управления какого-либо пользовательского элемента управления общедоступными без использования FindControl или общедоступных свойств? - PullRequest
1 голос
/ 22 ноября 2011

У меня есть пользовательский пользовательский элемент управления, который содержит текстовые поля, выпадающие списки и т. Д. Мне нужно, чтобы эти элементы управления были общедоступными, чтобы я мог ходить как ucEmployeeAddress.txtAddr1.Text извне элемента управления.

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

Если нет способа сделать то, что я хочу, тогда я просто пойду по маршруту государственной собственности.

Редактировать: Может ли человек, который рассмотрел мой вопрос, быть настолько любезным, чтобы объяснить, почему мой вопрос показывает отсутствие исследовательских усилий, неясен или бесполезен?

Ответы [ 4 ]

1 голос
/ 22 ноября 2011

Вам просто нужно выставить свойство в пользовательском элементе управления:

public string Address
{
    get
    {
        return txtAddr1.Text;
    }
    set
    {
        txtAddr1.Text = value;
    }
}
1 голос
/ 22 ноября 2011

Ну, через три часа я наконец нашел решение. Я не знаю, является ли это новым в VS2010, но вы можете отредактировать конструктор пользовательского элемента управления и превратить всех участников из Защищенного в Публичный. Клянусь, я пытался сделать это с более ранними версиями VS в прошлом, но безуспешно, но теперь он, очевидно, работает на меня.

Что интересно, так это то, что в среде IDE хорошо понимают, какие части конструктора должны и не должны создаваться. Например, если вы закомментируете все содержимое класса конструктора, он не будет восстанавливать закомментированные члены. Чтобы заставить его регенерировать их, вы должны полностью удалить участников, которых вы хотите регенерировать. Что еще клево, так это то, что вы можете закомментировать все содержимое класса дизайнера, переключиться обратно на разметку и добавить серверный элемент управления, например текстовое поле, и вернуться к конструктору, чтобы обнаружить, что он сгенерировал определение элемента только для этого элемента управления, а остальные из членских ссылок остаются закомментированными. Редактировать : И если вы удалите элемент управления из разметки, элемент конструктора которого вы изменили из защищенного в общедоступный, он все равно удалит ссылку из конструктора.

Замечу, что я также использую VB.NET. Я должен был бы предположить, что это работает и с C #, но не могу сказать наверняка.

1 голос
/ 22 ноября 2011

Вам действительно нужно выставить весь контроль?

Если это просто текстовое свойство, вы можете просто выставить это.

public string TitleText
{
     get { return this.txtTitle.Text;}
}

Если вам действительно нужен элемент управления, я бы предложил выставить его через свойство, потребители могут даже не знать о существовании или названии элемента управления, а также не должны заботиться о вашей внутренней работе - использование FindControl является плохим решением вне контроля.

public TextBox TitleTextBox
{
     get { return this.txtTitle;}
}

В качестве альтернативы вы можете изменить шаблоны Visual Studio, чтобы все ваши элементы управления были доступны для общественности, однако я не уверен, что это отличная идея или как вы это сделаете ..

0 голосов
/ 22 ноября 2011

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

Эта ссылка хорошо объясняет, как этого добиться.

В качестве дополнительного примечания вы должны быть более озабочены элегантностью своего кода, чем его количеством.

Если вы потратите время на реализацию всплывающего события, например, вместо того, чтобы выставлять дочерние элементы элемента управления как public, любая манипуляция дочерними элементами элемента управления обрабатывается этим элементом управления. Это позволяет легко поддерживать, если когда-либо изменяться логику манипуляции, и легко внедрять во все приложение.

Однако, если вместо этого вы выставите дочерних элементов управления как public, вы должны повторять эту манипуляцию везде, где она используется.

Следовательно, «избыточный код» улучшит качество вашего кода и фактически уменьшит этот «лишний код», который вас беспокоит.

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