Как да се обвърже клавишна клавиатура за бутона с стека преливане # форма на Руски
WinForms и клавиатура, доста забавно комбинация, особено когато се опитват да ги принуди да работят в хармония.
Всяко устройство за управление може да отговори на натискания на клавиши и да да са посочени няколко събития: Control.KeyDown. Control.KeyPress. Control.KeyUp. Изглежда, че е добре, да се абонирате за събития и да получите отговор на ключовете. Но има уловка - тези събития се задейства само когато контролът е на фокус. В допълнение, много контроли вече са стандартни товарачи ключове, много реагира на място, колкото едно кликване и текст полето и неговите роднини пресичане почти цялата клавиатура.
2. Формата на същото контролиране
Класът Form също наследява от контрол и е в състояние да получи тези събития. Изглежда, че е очевидно, се прехвърля на обработка ключови събития форма и да се насладите, тя също така изглежда, че винаги е на фокус. Но това не е всичко, което е лесно. Ако контролната дете настроен да използва ключовете и е в центъра на вниманието (и ако има деца под формата на контрол, един от тях трябва да е на фокус), а след това под формата просто ще игнорира клавиши.
Можете да си спомня свойствата Форма Form.KeyPreview. който е проектиран да прихване събития, когато ключови събития се предават първи във формата. Това изглежда да е работна версия, но ако не искате стандартната функционалност на контрола все още работи, трябва да се помни, за да зададете на имота KeyPressEventArgs.Handled = неверни; че след обработката на клавиатурата събития на ниво форма, той е прехвърлен в контролите на детето. Честно казано, това не е най-добрият вариант, тъй като Тя има своите ограничения и не всички проблеми могат да бъдат решени по този начин. Въпреки, че той изглежда да се направи и мисля.
Първият вариант за решаване на проблема, без връзка с шаманизма - за да добавите в менюто под формата на лицето MenuStrip. Менюто е направено по такъв начин, че всеки един от неговите елементи, можете да щракам с клавишна комбинация, като спира всички клавишни събития, за да правилното им меню операция и се дава допълнително само тези, които не включват кликвания върху определени клавиши и комбинации. Метод на всички е добре, но няколко неща: за всички правилни ключовете и комбинациите нужда елемент от менюто и искате самото меню във формуляра. Ако първият проблем, все още може да бъде решен чрез използването на скрити елементи (не лично тестван), а вторият - наистина е проблем, защото Тя не позволява на всяка форма на заявление присъствието на менюто си, и да го добавите само за ключ за обработка. добре, можете да си точка.
4. универсално решение
Не бързайте да се радвате, всички предишни точки, необходими майсторство на само на един клик на мишката върху интерфейса на дизайн, а след това трябва да се напише код.
Под формата, както и всяко управление има един виртуален метод ProcessCmdKey. който е отговорен за обработката на кредитно неизпълнение на клавиатурата събития, така че е необходимо да се предефинират нашата форма за получаване на очакваното и правилната работа на клавиатурата.
Обаждане на база метод - не се изисква. За прехвърлянето на контрол над дъщерно събитие отговаря на резултата от метода, само малко логика напротив: вярно - ключът се обработват, не се изисква допълнителна обработка; фалшиво - събитието ще бъдат прехвърлени на контрол над дъщерно предприятие, дори и да се направят някои предварителна обработка. По този начин вие имате пълен контрол върху обработката на клавиатурата събития на ниво форма или на потребителски контрол.
Предимството на този метод се състои в това, че можете да получите достъп до параметър keyData. който, за разлика от KeyPressEventArgs съдържа не само символ показва, и цялата информация за натиснат клавиша, включително кода на сканиране, състоянието на бутоните на модифициращите и друга полезна информация. За това, какъв вид събитие настъпило, е отговорен за определяне на съобщ. който съдържа WinAPI система съобщение. Ние сме заинтересовани в принадлежност към WM_KEYDOWN на клавиатурата и WM_KEYUP. Събитие натискане - всъщност да съответства WM_KEYDOWN и WM_KEYUP.
5. И така, как да се възползват от?
Да, действително, както обикновено. С натискане на бутон и щракнете върху бутона е действие на потребителя, че трябва да предизвиква някаква реакция програма. Реакцията е описан от отделен частен метод, както и бутон товарачи кликвания и натискане на клавиш, поставени призив към този метод. Този подход елиминира необходимостта да копирате кода, кода на обработват събитие намалява до минимум и позволява на обаждащия се да се уточни реакцията на програма с всички възможни средства, било то с едно щракване на никакъв контрол или избор на бутона на отметка или радио, основен или комбинация, меню, или всички наведнъж. код на отговор е на едно място и, ако е необходимо, да промените това не трябва да се мисли къде другаде сте забравили да се коригира.
Ако имате достатъчно ентусиазъм, аз се съберат по-късно през този отговор връзки към въпроси, свързани с добри отговори. В същото време, първото нещо, което намери на без копаене дълбоко: