Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
WST_Lucifer
2 / 2 / 0
Регистрация: 12.10.2011
Сообщений: 93
1

Установление свойста контрола формы зависимо от условия

26.10.2011, 23:12. Просмотров 1122. Ответов 3
Метки нет (Все метки)

Такая проблема: на форме есть label. Мне нужно установить его свойство Visible в зависимости от условия (глобальная булевская переменная)
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.10.2011, 23:12
Ответы с готовыми решениями:

Установление ширины элемента разделённой формы по ширине основной формы
Здравствуйте! Подскажите пожалуйста, как в разделённой форме ширину элемента формы автоматически...

Установление размера элемента формы по размеру формы
Всем привет! Подскажите пожалуйста, каким образом установить размер элементов формы равным размеру...

Закрытие формы по esc, не зависимо от фокуса
собственно в заголовке весь вопрос поместился. Я знаю как можно обработать нажатие если фокус...

Обновление контрола формы из отдельного потока не класса формы
Привет. Нужно подпнуть, что-то я не догоняю... Запускаю по клику отдельный поток для вычислений,...

Имя контрола в заголовке формы
Как в заголовок окна формы вывести название контрола над которым находится курсор мыши в программе...

3
kolorotur
Эксперт .NET
12364 / 9837 / 2532
Регистрация: 17.09.2011
Сообщений: 16,733
Завершенные тесты: 1
26.10.2011, 23:15 2
Создайте свойство для булевской переменной и используйте привязку данных.
0
WST_Lucifer
2 / 2 / 0
Регистрация: 12.10.2011
Сообщений: 93
26.10.2011, 23:31  [ТС] 3
Обьясните пожалуйста
0
kolorotur
Эксперт .NET
12364 / 9837 / 2532
Регистрация: 17.09.2011
Сообщений: 16,733
Завершенные тесты: 1
27.10.2011, 01:29 4
Перво-наперво, нужно обеспечть контролу возможность узнать, что какая-то ваша переменная изменилась.
Для этого ваш класс должен реализовать интерфейс INotifyPropertyChanged.
Этот интерфейс содержит всего лишь одно событие, которое вы в своем классе должны запускать при изменении нужного вам свойства.

Пример:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public class MyForm : Form, INotifyPropertyChanged
{
   // Это событие объявлено в интерфейсе INotifyPropertyChanged
   public event PropertyChangedEventHandler PropertyChanged;
 
   // Событие принято запускать из защищенного метода On[EventName] - чтобы потомки в случае чего могли его переопределить.
   protected void OnPropertyChanged(PropertyChangedEventArgs e)
   {
       // Запуск события
       if (PropertyChanged != null) PropertyChanged(this, e);
   }
 
   // Переменная для вашего условия
   private bool condition;
 
   // Свойство, через которое будет производиться привязка переменной к контролу
   public bool Condition
   {
      get { return condition; }
      set
      {
          if (condition == value) return;
          condition = value;
 
          // Значение переменной изменилось - вызываем метод, запускающий событие.
          // Параметр в конструкторе аргумента - имя свойства, чтобы привязаный контрол знал какое именно поле изменилось
          // Если этого не сделать, то привязанный контрол никогда не узнает, что значение вашей переменной изменилось и что ему надо изменить свое привязанное свойство соответствующим образом.
          OnPropertyChanged(new PropertyChangedEventArgs("Condition"));
      }
   }
}
Собственно, всё.
После этого надо лишь привязать наше свойство к свойству контрола:
C#
1
2
3
4
5
6
7
8
9
public Form1()
{
   InitializeComponent();
   
   // Первый аргумент - свойство контрола, к которому делаем привязку
   // Второй аргумент - ссылка на объект, с которым связываем контрол
   // Третий аргумент - свойство предыдущего объекта, которое привязывается к свойству в первом аргументе
   label1.DataBindings.Add("Visible", this, "Condition");
}
Всё.
После этого при каждом изменении свойства Condition в форме, будет изменяться свойство Visible контрола.

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

C#
1
2
3
4
5
6
7
8
9
10
11
private string someText;
public string SomeText
{
   get { return someText; }
   set
   {
      if (someText == value) return;
      someText = value;
      OnPropertyChanged(new PropertyChangedEventArgs("SomeText"));
   }
}
Теперь свойство SomeText можно привязать к свойству Text какого-нибудь текстбокса:
C#
1
textBox1.DataBindings.Add("Text", this, "SomeText");
После чего изменение текстового поля автоматом изменит значение переменной someText и наоборот.
1
27.10.2011, 01:29
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.10.2011, 01:29

Скриншот контрола перекрытой формы
Здравствуйте. Нужно получить скриншот содержимого контрола (например PictureBox) даже если форма...

Положение контрола относительно формы
Пытаюсь вот определить положение контрола относительно формы. Не было бы проблемы если бы этот...

Изменение свойств контрола с другой формы
Здравствуйте. Такой вопрос: У меня программа работает по такой методике - запускается первая...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.