我在FlowLayoutPanel
中有TabControl
。首次显示表单时,FlowLayoutPanel
可以使用鼠标滚轮滚动,其ContainsFocus
属性为true
。当我转到另一个选项卡并返回第一个时,即使在调用flowPanel.Focus()
之后焦点也不存在。 ContainsFocus
属性为false
,直到我点击面板中的某个控件为止。如何将焦点设置为FlowLayoutPanel
?
答案 0 :(得分:1)
我不知道您正在使用哪个版本的Visual Studio,但是在tabControl上,我添加了以下内容......
public Form1()
{
InitializeComponent();
tabControl1.SelectedIndexChanged += tabControl1_SelectedIndexChanged;
}
private void tabControl1_SelectedIndexChanged(object sender, EventArgs e)
{
SendKeys.Send("\t");
}
这样,一旦选项卡页面发生变化,它就会强制显示一个"标签"强制到页面内第一个字段的键。如果您需要额外的焦点,您应该可以运行它,例如:如果在第1页上转到此字段,如果第2页,请转到另一个字段...
答案 1 :(得分:0)
在您的示例中,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);
}