可能重复:
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会开火?
(我的英文故事)
答案 0 :(得分: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);
}
}
}
}
答案 1 :(得分:0)
第一个lostFocus会将高度设置为1,而onGotFocus将设置为1 * 1,即1,实际上不会改变任何内容。