多个流布局面板panel.Focus()无法正常工作

时间:2014-02-28 20:17:44

标签: c# winforms

我制作了一个带有流程布局面板的程序,以及该面板内部的多个动态生成的布局面板。

现在我想在鼠标悬停在子面板上时滚动它们,但只是将panel.Focus();设置为面板不起作用。我需要在面板中单击,但面板完全填充了可点击的项目。所以如果我只是悬停,我想让它集中注意力。

为什么panel.Focus()不起作用的任何想法,或者你知道什么可能导致这个问题吗?

1 个答案:

答案 0 :(得分:0)

希望汉斯'请原谅我,但是his code example通过实现IMessageFilter接口来监听轮子消息并将其转发到鼠标当前所在的可滚动控件上,从而做到了你想要的。无需使用Panel1.Focus();

public partial class Form1 : Form, IMessageFilter {
  [DllImport("user32.dll")]
  private static extern IntPtr WindowFromPoint(Point pt);
  [DllImport("user32.dll")]
  private static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wp, IntPtr lp);

  public Form1() {
    InitializeComponent();
    Application.AddMessageFilter(this);
  }

  public bool PreFilterMessage(ref Message m) {
    if (m.Msg == 0x20a) {
      Point pos = new Point(m.LParam.ToInt32());
      IntPtr hWnd = WindowFromPoint(pos);
      if (hWnd != IntPtr.Zero && hWnd != m.HWnd && Control.FromHandle(hWnd) != null) {
        SendMessage(hWnd, m.Msg, m.WParam, m.LParam);
        return true;
      }
    }
    return false;
  }
}