|
Программирование >> Автоматически обновляемые приложения
Как пройтись по всем элементам управления на форме? Иногда встречается задача пройтись по всем элементам управления на форме, чтобы изменить какие-либо свойства. Например, может понадобиться изменить текст у всех текстовых полей или цвет у всех кнопок. Вы можете перебрать в цикле элементы yпpaвлeния, используя объект Control. ControlCollection, возвращаемый свойством Form. Controls. ControlCollection ВКЛЮЧает В себя все элементы управления, расположенные на форме. Однако тут есть одна тонкость. Некоторые элементы управления являются контейнерами для других элементов управления. К числу таких контейнеров относятся элементы управления GroupBox, Panel, TabPage и др. ПоЭТОМу В таких СЛучаяХ МОЖет ПОНаДО- биться рекурсивный перебор всех элементов. Рассмотрим несколько примеров. Расположим на форме несколько текстовых полей и одну кнопку. Предположим, нам необходимо поменять текст у всех текстовых полей. Код для решения этой задачи приведен в листинге 6.2. Листинг 6.2. Получение всех элементов управления на Форме private void buttonl Click(object sender, EventArgs e) { foreach (Control Ctrl in this.Controls) { Работаем только с текстовыми полями if (ctrl.GetType() == typeof(TextBox)) Ctrl.Text = Народные советы ; Листинг 6.1. Добавление элемента на форму Шаг 1 TextBox tb = new TextBox(); Шаг 2 tb.Location = new Point( 10, 10); tb.Size = new Size(100, 20); tb.Text = Я бьш создан во время вьшолнения программы ; Шаг 3 this.Controls.Add(tb); Листинг 6.3. Рекурсивный способ обхода всех элементов управления private void IterateControls(Control Ctrl) { Работаем только с текстовыми полями if (Ctrl.GetTypeО == typeof(TextBox)) { Ctrl.Text = Народные советы ; Проходим через элементы рекурсивно, чтобы не пропустить элементы, которые находятся в контейнерах foreach (Control ctrlChild in Ctrl.Controls) IterateControls(ctrlChild); private void buttonl Click(object sender, EventArgs e) { IterateControls(this); Как изменить цвет границы (Border) у элемента управления? Если вы хотите изменить цвет границы у своего элемента управления, то переопределите метод onPaint. В листинге 6.4 приведен небольшой пример, который меняет окантовку у кнопки. Сначала мы создаем новый класс Если бы мы не использовали строчку if (ctrl.GetTypeО == typeof(TextBox)) текст поменялся бы не только у текстовых полей, но и у кнопки. Усложним задачу. Поместим на форму элемент Panel и на нее поместим еще одно текстовое поле. Запустите проект и нажмите на кнопку- вы увидите, что текст в добавленном текстовом поле не изменился. Следовательно, чтобы изменить текст во всех без исключения текстовых полях, нам придется воспользоваться рекурсией (листинг 6.3). ! Листинг 6.4. Изменение цвета границ у элемента управления public class MyButton : Button { protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); int borderWidth = 1; Color borderColor = Color.Green; ControlPaint.DrawBorder(e.Graphics, e.ClipRectangle, borderColor, borderWidth, ButtonBorderStyle.Solid, borderColor, borderWidth, ButtonBorderStyle.Solid, borderColor, borderWidth, ButtonBorderStyle.Solid, borderColor, borderWidth, ButtonBorderStyle.Solid); public Forml() { InitializeComponent(); MyButton btn = new MyButton( btn.Width = 90; btn.Height = 50; btn.Left = 100; btn.Top = 10; btn.Text = Я новая кнопка ; btn.Visible = true; this.Controls.Add(btn); Окантовка вокруг элемента управления Другой вариант- обвести окантовку вокруг нужного элемента управления, используя его размеры (листинг 6.5). MyButton, устанавливаем нужный цвет и добавляем кнопку на форму, используя предыдущий пример (см. листинг 6.1).
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |