Panel not getting focus

Это так странно, но я нашел обходной путь в том, что установка кнопки поиска более чем на 20%. Затем она будет хорошо работать в IE, как и в Chrome. Я предполагаю, что, возможно, поведение IE при отображении страницы немного отличается от chrome.

#search-button {
display: inline-block;
width: 20%;

}

result

28
задан Community 23 May 2017 в 11:47
поделиться

2 ответа

Класс Panel был разработан как контейнер, он избегает выделения фокуса, поэтому дочерний элемент управления всегда будет его получать. Чтобы это исправить, вам понадобится операция. Я добавил код для получения нажатий клавиш курсора и в событии KeyDown:

using System;
using System.Drawing;
using System.Windows.Forms;

class SelectablePanel : Panel {
    public SelectablePanel() {
        this.SetStyle(ControlStyles.Selectable, true);
        this.TabStop = true;
    }
    protected override void OnMouseDown(MouseEventArgs e) {
        this.Focus();
        base.OnMouseDown(e);
    }
    protected override bool IsInputKey(Keys keyData) {
        if (keyData == Keys.Up || keyData == Keys.Down) return true;
        if (keyData == Keys.Left || keyData == Keys.Right) return true;
        return base.IsInputKey(keyData);
    }
    protected override void OnEnter(EventArgs e) {
        this.Invalidate();
        base.OnEnter(e);
    }
    protected override void OnLeave(EventArgs e) {
        this.Invalidate();
        base.OnLeave(e);
    }
    protected override void OnPaint(PaintEventArgs pe) {
        base.OnPaint(pe);
        if (this.Focused) {
            var rc = this.ClientRectangle;
            rc.Inflate(-2, -2);
            ControlPaint.DrawFocusRectangle(pe.Graphics, rc);
        }
    }
}
59
ответ дан 28 November 2019 в 02:52
поделиться

фокус вызова в событии щелчка

private void Panel_Click(object sender, EventArgs e)
    {
        Panel.Focus();
    }
0
ответ дан 28 November 2019 в 02:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: