0

重複の可能性:
パネルにフォーカスがない

winform で Panel コントロールをテストしたところ、問題が発生しました。

私はパネルに追加したこの2つのイベントを持っていますが、それらのどれも発火しません:

 private void panel_onFocus(object sender, EventArgs e)
    {
        panel1.Size = new Size(panel1.Size.Width, panel1.Size.Height * panel1.Size.Height);
    }

    private void panel_lostFocus(object sender, EventArgs e)
    {
        panel1.Size = new Size(panel1.Size.Width, panel1.Size.Height / panel1.Size.Height);
    }

フォーカス(ボタン)をテストするために、フォームに別のコントロールを取得しました。

onFocus と lostFocus が起動しないのはなぜですか?

(私の英語でごめんなさい)

4

2 に答える 2

1

以下は選択可能なパネルです(通常のパネルから継承)

パネルから取得してフォーカスが得られない

これを試して。このクラスをプロジェクトに追加します。ちょうど変化してnamespace yourApplicaionNameいます。プロジェクトをコンパイルします。次にselectablePanel、ツールボックスに表示されます。通常のパネルの代わりに使用できます。このパネルに集中していただけると幸いです

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

namespace yourApplicaionName
{
    class selectablePanel : Panel
    {
        public selectablePanel()
        {
            this.SetStyle(ControlStyles.Selectable, true);            
            ResizeRedraw = 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);
            }
        }
    }
}
于 2012-10-26T17:18:36.023 に答える
0

最初に lostFocus は高さを 1 に設定し、onGotFocus は 1*1 を乗算しますが、これは事実上何も変更しない 1 です。

于 2012-10-26T16:40:33.003 に答える