2010-07-15 2 views
1

Как dan я динамически создаю некоторые общедоступные свойства в настраиваемом webcontrol.Динамически создавать общедоступные свойства

Например, веб-управление имеет 5 элементов управления TextBox. Мне нужно публичное свойство для каждого элемента управления TextBox, чтобы иметь возможность установить определенное свойство элемента управления TextBox.

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

любые идеи?

+0

Вы можете сделать их общедоступными, после чего вы можете получить к ним доступ со страницы. –

ответ

1

Отредактировано:

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

Вот мое предложение:

  • Оставьте свои элементы управления, как Friend или Private - не подвергать их непосредственно (это приводит к сильной связи и получает неприятную с течением времени).

  • Вывести новое публичное свойство, которое получает/устанавливает соответствующее свойство на 1x ваших элементов управления; поэтому, если вы хотите установить .Text на 5x TextBoxes, вы получите 5x свойств.

  • Проделайте это.

Если вы пытаетесь быть умными, динамически добавляя их, тогда это хорошее намерение, которое приведет к плохим результатам. Просто помните: KISS (Держите это просто, глупо!).

+0

Присутствует во время разработки. –

+0

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

1

Вы можете создать свойство, как этот

private TextBox[] textBoxes; //declared as a class member variable 

    public TextBox[] TextBoxes 
    { 
     get 
     { 
      if (textBoxes == null) 
      { 
       textBoxes =(from ctrl in this.Controls.OfType<Control>() 
          where ctrl is TextBox 
          select (TextBox)ctrl).ToArray(); 
      } 
      return textBoxes; 
     } 
    } 
+0

Мне нужно иметь возможность устанавливать значения, хотя .... –

+0

Пока вы не пытаетесь установить коллекцию текстовых полей с помощью этого метода, вы все равно должны быть в порядке, хотя это свойство доступно только для чтения. Вы бы сделали что-то вроде 'myControl.TextBoxes [0] .Text =« Test »;' –

+0

Это будет работать, но почему бы просто не разоблачить элементы управления как «Public» ... Лично я бы советовал против * обоих * подходов - выставляющие элементы управления широко открыты для злоупотреблений и плохих привычек. – STW

0

выставляя управления, содержащиеся в WebContol (или любого класса по этому вопросу) не хороший дизайн, как это делает ваш код ломкими и трудно поддерживать. Вы должны поместить код, который непосредственно манипулирует TextBoxes внутри WebControl.

Смежные вопросы