Рекция формы на нажатие клавиш

Тема в разделе ".NET", создана пользователем @LE}{@NDER, 22 мар 2009.

  1. @LE}{@NDER

    @LE}{@NDER Гость

    Проблема заключается в следующем:
    Есть форма, которая реагирует на нажатия клавиш. Все бы хорошо, да вот, когда добавляю кнопку на форму, форма перестает реагировать на нажатия клавиш. Комментирую кнопку, все нормально. Кто-нибудь сталкивался с подобным? В чем проблема-то собственно? Ставил брейк поинты - прога вообще не реагирует на событие нажатия клавиш.

    Код инициализации формы:
    [codebox]
    //
    // Form1
    //
    this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
    this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
    this.BackgroundImage = global::MegaSnake.Properties.Resources.Background2;
    this.ClientSize = new System.Drawing.Size(292, 266);
    this.Controls.Add(this.CloseBtn);
    this.DoubleBuffered = true;
    this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
    this.Name = "Form1";
    this.Text = "Form1";
    this.Load += new System.EventHandler(this.Form1_Load);
    this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.Form1_KeyDown);
    this.ResumeLayout(false);
    [/codebox]

    Код инициализации кнопки
    [codebox]
    private System.Windows.Forms.Button CloseBtn;
    this.CloseBtn = new System.Windows.Forms.Button();
    //
    // CloseBtn
    //
    this.CloseBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
    this.CloseBtn.BackColor = System.Drawing.Color.Transparent;
    this.CloseBtn.FlatAppearance.BorderSize = 0;
    this.CloseBtn.FlatAppearance.MouseDownBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(192)))), ((int)(((byte)(255)))));
    this.CloseBtn.FlatAppearance.MouseOverBackColor = System.Drawing.Color.Indigo;
    this.CloseBtn.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
    this.CloseBtn.Image = global::MegaSnake.Properties.Resources.CloseBtn;
    this.CloseBtn.Location = new System.Drawing.Point(240, 7);
    this.CloseBtn.Name = "CloseBtn";
    this.CloseBtn.Size = new System.Drawing.Size(45, 45);
    this.CloseBtn.TabIndex = 1;
    this.CloseBtn.UseVisualStyleBackColor = true;
    this.CloseBtn.Click += new System.EventHandler(this.CloseBtn_Click);
    [/codebox]

    Ну и обработчик нажатия на клавиши:
    [codebox]
    private void Form1_KeyDown(object sender, KeyEventArgs e)
    {
    switch (e.KeyCode)
    {
    case Keys.Up:
    direction = Directions.West;
    break;
    case Keys.Down:
    direction = Directions.East;
    break;
    case Keys.Left:
    direction = Directions.South;
    break;
    case Keys.Right:
    direction = Directions.North;
    break;
    case Keys.Escape:
    this.Close();
    break;
    }
    }
    [/codebox]
     
  2. @LE}{@NDER

    @LE}{@NDER Гость

    Вопрос немного меняется. Поменял клавиши со стрелками на W, S, A, D, заработало, но все равно непонятно, почему не работают стрелки.
     
  3. Delegat

    Delegat Гость

    Сталкивался с похожей проблемой, но там тупо фокус был не на форме. Может и тут такой же косяк?
     
  4. yanny

    yanny Гость

    Скорее всего. Отследи где фокус находился. На форме самой или на кнопке. Скорее всего проблема именно в этом. когда фокус на кнопке, при нажатии стрелок пытаеться поменяться фокус, а т.к. кнопка одна, то фокус на месте...
     
  5. VladimirN

    VladimirN Гость

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

Поделиться этой страницей