Программирование >>  Автоматически обновляемые приложения 

1 ... 44 45 46 [ 47 ] 48 49 50 ... 170


Как пройтись по всем элементам управления на форме?

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

цикле элементы 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).



1 ... 44 45 46 [ 47 ] 48 49 50 ... 170

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика