FlowLayoutPanel Focus()不起作用

时间:2014-10-24 11:16:15

标签: c# winforms

我在FlowLayoutPanel中有TabControl。首次显示表单时,FlowLayoutPanel可以使用鼠标滚轮滚动,其ContainsFocus属性为true。当我转到另一个选项卡并返回第一个时,即使在调用flowPanel.Focus()之后焦点也不存在。 ContainsFocus属性为false,直到我点击面板中的某个控件为止。如何将焦点设置为FlowLayoutPanel

2 个答案:

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