FlowLayoutPanel Focus()不起作用
本文关键字:不起作用 Focus FlowLayoutPanel | 更新日期: 2023-09-27 18:27:38
我在TabControl
中有FlowLayoutPanel
。当表单首次显示时,FlowLayoutPanel
可以使用鼠标滚轮滚动,其ContainsFocus
属性为true
。当我转到另一个选项卡并返回到第一个选项卡时,即使在调用flowPanel.Focus()
之后,焦点也不在那里。ContainsFocus
属性为false
,直到我单击面板中的某个控件为止。如何将焦点设置为FlowLayoutPanel
?
我不知道你使用的是哪个版本的Visual Studio,但在tabControl上,我添加了以下。。。
public Form1()
{
InitializeComponent();
tabControl1.SelectedIndexChanged += tabControl1_SelectedIndexChanged;
}
private void tabControl1_SelectedIndexChanged(object sender, EventArgs e)
{
SendKeys.Send("'t");
}
这样,只要选项卡式页面发生更改,就会强制使用一个"选项卡"键,该键将强制指向页面中的第一个字段。如果您需要额外的关注,您应该能够使用它运行,例如:如果在第1页上转到此字段,如果在第2页上转到另一个字段。。。
在您的示例中,当form loads
或更改tab
时,所有mouse wheel
消息都由form
处理。因此,当这种情况发生时,也向flowLayoutPanel1
发送消息:
[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam);
protected override void WndProc(ref Message m)
{
if (m.Msg == 0x020A) //WM_MOUSEWHEEL
{
if(tabControl1 .SelectedIndex == 0) //0 index where flowLayoutPanel1 is
{
//send the message to flowLayoutPanel1
SendMessage(flowLayoutPanel1.Handle, (UInt32)m.Msg, m.WParam, m.LParam);
}
}
base.WndProc(ref m);
}