Здравствуйте, кто может подсказать и показать примерами как бы в роде простую задачку?
Есть три ComboBox
на 4 пункта:
и есть три индикатора для каждой кнопки.
Нужно сделать так: если человек выбирает в ComboBox
для первого индикатора клавишу, например Num Lock , тогда первый индикатор будет реагировать только на клавишу Num Lock , а если человек выбирает клавишу Caps Lock - значить индикатор будет реагировать только на клавишу Caps Lock , и так далее для остальных 2-х индикаторов и ComboBox
.
Перед тем как выполнить соответствие (в вашем случае - нужно каждому индикатору поставить в соответствие состояние клавиши), необходимо продумать архитектуру. Предлагаю внести в проект класс для одного индикатора.
public class LedItem {
public const int NULL = 0x00;
public const int CAPS_LOCK = 0x01;
public const int NUM_LOCK = 0x02;
public const int SCROLL_LOCK = 0x03;
private int index;
private int keyCode;
public LedItem(int index, int keyCode) {
this.index = index;
this.keyCode = keyCode;
}
public int Index {
get {
return this.index;
}
}
public int KeyCode {
get {
return this.keyCode;
}
set {
this.keyCode = value;
}
}
}
Перед тем как что то выбирать, на старте проекта необходимо сформировать наши индикаторы, например:
private LedItem led1 = new LedItem(0, LedItem.NULL);
Вешаем слушателя на ComboBox:
int select = cmbButtonState.SelectedIndex;
switch (select) {
case 0:
led1.KeyCode = LedItem.NULL;
break;
case 1:
led1.KeyCode = LedItem.CAPS_LOCK;
break;
case 2:
led1.KeyCode = LedItem.NUM_LOCK;
break;
case 3:
led1.KeyCode = LedItem.SCROLL_LOCK;
break;
}
Слушатель меняет клавишу, за которой следит индикатор. Всё довольно просто.
Рисуем результат относительно статусов индикаторов, для этого, можно добавить таймер (если это UI поток), или Thread:
private void tmrThread_Tick(object sender, EventArgs e) {
switch (led1.KeyCode) {
case LedItem.NULL:
chkLed.Checked = false;
break;
case LedItem.CAPS_LOCK:
chkLed.Checked = KeyService.CapsLockState;
break;
case LedItem.NUM_LOCK:
chkLed.Checked = KeyService.NumLockState;
break;
case LedItem.SCROLL_LOCK:
chkLed.Checked = KeyService.ScrollLockState;
break;
}
}
Для полноты картины прикрепляю исходник проекта. Ссылка на архив
Если вы знакомы с делегатами, я могу намекнуть на то что от switch конструкций можно избавиться) Если не знакомы, можете оставлять всё как есть. Для того чтобы добавить ещё два индикатора, не надо лепить led2, led3... и т.д., достаточно собрать коллекцию List и проходить по ней, индекс индикатора будет в led.Index, код клавиши за которой он следит - led.KeyCode
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Запутался в одном вопросе, просьба знающих помочьПри открытии формы проверяю, существует ли на жёстком диске файл
Можно ли как-то в c# в самом методе подключить функцию из dll ? То есть, подобную конструкцию засунуть в метод (например метод Main):
I have many data from observable collection, the data in back end loaded asynchronousThe pattern is MVVM WPF