2014-02-28 24 views
1

我已經制作了一個帶有流佈局面板和多個動態生成的佈局面板的程序。多流式佈局面板panel.Focus()不起作用

現在我想滾動鼠標懸停在他們的子面板,但只是設置panel.Focus();面板不起作用。我需要點擊面板,但面板上完全裝滿了可點擊的項目。因此,如果我只是徘徊,我想讓它成爲焦點。

任何想法爲什麼panel.Focus()不起作用,或者你知道什麼可能會導致此問題?

+0

面板不需要*重點,它沒有用處。它不能指示焦點並且不處理鍵盤輸入。所以如果它的孩子立即傳給它。否則很不清楚你打算如何通過點擊鼠標來滾動。點擊滾動條,或使用鼠標滾輪。如果您沒有滾動條,那麼您忘記將AutoScroll屬性設置爲True。 –

+0

我得到了一個滾動條,只是想設置當前面板滾動 – WebFreak001

回答

0

Hope Hans'原諒我,但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; 
    } 
} 
+0

是的工作:)謝謝 – WebFreak001