Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обработка клавиатуры, Не работае KeyDown 
:(
    Опции темы
UserNet
Дата 13.12.2006, 08:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 226
Регистрация: 13.12.2006
Где: Новосибирск

Репутация: нет
Всего: 3



Народ, у меня такая проблема возникла, я пишу на C++ под платформы .NET.Мне нужно что бы у меня форма сначало обработывала клавиатуру, а затеам contol, как это сделать для стрелок, на клавиатуре, (KeyPreview=true я поставил) у меня при нажатии стрелок перемещается фокус между двух кнопок и всё.

Код

 void createform1()
  {
        child = new Form();
        child->Width=600;
        child->Height=600;
        child->MdiParent = this;
        
        child->KeyPress += new KeyPressEventHandler(this,&MyForm::AsciiCod); 

        
        child->Show();
        
        initlabel();
        InitButton();
        
}


Код InitButton
Код

 void InitButton()
        {
            poButton=new Button();
            poKey=new Button();
            poButton->Top=150;
            poButton->Left=310;
            poButton->Text="New";
            poButton->BackColor=Color::Blue;
            poButton->Click +=new EventHandler(this,&MyForm::create);
            child->Controls->Add(poButton);
            poKey->Top=120;
            poKey->Left=220;
            poKey->Text="Text";
            poKey->Click +=new EventHandler(this,&MyForm::create1);

            /*pTb= new TextBox();
            pTb->Top=120;
            pTb->Left=350;*/

            
//        this->child->Controls->Add(pTb);
            this->child->Controls->Add(poKey);
            child->KeyPreview=true;
            child->KeyUp+= new KeyEventHandler(this,&MyForm::ClearLab);
            child->KeyDown+= new KeyEventHandler(this,&MyForm::Work);

        }


Код intilabel
Код


 void  initlabel()
        {
          lb1= new Label();
          lb2= new Label();
          lb3= new Label();
          lb4= new Label();
          lb5= new Label();
          lb6= new Label();
          lb7= new Label();
         
          lb1->Text="Keypress Character";
          lb1->Left=10;
          lb1->Top=10;
          lb1->BorderStyle=System::Windows::Forms::BorderStyle::FixedSingle;
          
          lb2->Text="Key down value";
          lb2->Left=10;
          lb2->Top=40;
          lb2->BorderStyle=System::Windows::Forms::BorderStyle::FixedSingle;
            
          lb3->Size=System::Drawing::Size(100,50);
          lb3->Text=S"Special Key Alt: Shift: Ctrl:";
          lb3->Left=10;
          lb3->Top=60;
          lb3->BorderStyle=System::Windows::Forms::BorderStyle::FixedSingle;
          
          lb4->Text="F12";
          lb4->Left=200;
          lb4->Top=10;
          lb4->BorderStyle=System::Windows::Forms::BorderStyle::FixedSingle;

          lb5->Text="123";
          lb5->Left=200;
          lb5->Top=40;
          lb5->BorderStyle=System::Windows::Forms::BorderStyle::FixedSingle;
          
          lb6->Size=System::Drawing::Size(250,50);
          lb6->Text=" ";
          lb6->Left=200;
          lb6->Top=62;
          lb6->BorderStyle=System::Windows::Forms::BorderStyle::FixedSingle;

          lb7->Text="Press any key and hold down Shift, Alt,and Ctrl keys to see their ASCII and virtual key values. ";
          lb7->Left=310;
          lb7->Top=10;
          lb7->Size=System::Drawing::Size(120,52);
          lb7->BorderStyle=System::Windows::Forms::BorderStyle::FixedSingle;
          
         

          child->Controls->Add(lb1);
          child->Controls->Add(lb2);
          child->Controls->Add(lb3);
          child->Controls->Add(lb4);  
          child->Controls->Add(lb5);
          child->Controls->Add(lb6);
          child->Controls->Add(lb7);

        }

причём если раскоментировать код в InitButton, то будет работать.
PM MAIL   Вверх
juravel
Дата 19.12.2006, 23:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 18.12.2006

Репутация: нет
Всего: нет



Знаю только для кпк на c#:
Код

static void Main() 
        {
            Application.Run(new StarLightForm());
        }

        private void timer1_Tick(object sender, System.EventArgs e)
        {
            updateGame();
        }

        private void StarLightForm_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
        {
            e.Graphics.DrawImage(backBuffer,0,0);
        }

        private void leftKeyMenuItem_Click(object sender, System.EventArgs e)
        {
            newGame();
        }

        private void StarLightForm_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
        {
            keyDown (e.KeyCode);
        }

        private void StarLightForm_KeyUp(object sender, System.Windows.Forms.KeyEventArgs e)
        {
            keyUp();
        }

        private void StarLightForm_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
        {
            keyPress (e.KeyChar);
        }

        private void exitMenuItem_Click(object sender, System.EventArgs e)
        {
            Application.Exit();
        }

        private void StarLightForm_LostFocus(object sender, System.EventArgs e)
        {
            pauseGame();
        }

        private void StarLightForm_GotFocus(object sender, System.EventArgs e)
        {
            resumeGame();
        }

Может бить не в тему smile 
PM MAIL   Вверх
mr.DUDA
Дата 20.12.2006, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 24
Всего: 232



Надо выставить у формы свойство KeyPreview = true, тогда все нажатия вначале будут приходить в форму, а только потом в контролы.


--------------------
user posted image
PM MAIL WWW   Вверх
ivashkanet
Дата 20.12.2006, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 11
Всего: 149



mr.DUDA, 
Цитата(UserNet @  13.12.2006,  07:20 Найти цитируемый пост)
KeyPreview=true я поставил

 smile  smile 
PM MAIL WWW ICQ   Вверх
mr.DUDA
Дата 20.12.2006, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 24
Всего: 232



Упс. Точно.

Проблема в том, что некоторые клавиши (Tab, стрелки) вынесены в отдельную группу, и управляют фокусом на форме. Чтобы этого не происходило, надо подписаться на событие PreviewKeyDown контролов (кнопок и др.) и в обработчике поставить:
Код
e.IsInputKey = true;


Тогда все клавиши будут трактоваться как обычные, и обрабатываться соответственно. Стрелки не будут перемещать между кнопками.


--------------------
user posted image
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.0470 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.