WinForm调整面板onFocus

时间:2012-10-26 16:31:28

标签: c# winforms

  

可能重复:
  Panel not getting focus

我在winform中测试Panel控件,我遇到了问题。

我有两个事件,我添加到面板但没有发射:

 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);
    }

我在Form上有另一个控件来测试焦点(一个按钮)。

为什么onFocus和lostFocus dosnt会开火?

(我的英文故事)

2 个答案:

答案 0 :(得分:1)

以下是可选择的面板(继承自常规面板)

来自Panel not getting focus

试试这个。在项目中添加此类。只需更改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);
            }
        }
    }
}

答案 1 :(得分:0)

第一个lostFocus会将高度设置为1,而onGotFocus将设置为1 * 1,即1,实际上不会改变任何内容。