Frage

Ich mache eine WinForms-Anwendung mit einem Listview zum Detail festgelegt, so dass mehrere Spalten angezeigt werden.

würde ich für diese Liste gerne zu bewegen, wenn die Maus über das Steuerelement ist und der Benutzer die Maus-Scrollrad. Gerade jetzt, Scrollen geschieht nur, wenn die Listview Fokus hat.

Wie kann ich den Listview-Scroll selbst machen, wenn es nicht den Fokus hat?

War es hilfreich?

Lösung

Sie werden normalerweise nur Maus / Tastatur-Ereignisse an einem Fenster oder Kontrolle bekommen, wenn es den Fokus hat. Wenn man sie ohne den Fokus sehen will, dann Sie gehen zu müssen, statt einen niedrigeren Ebene Haken setzen.

Hier ist ein Beispiel geringer Maus-Hook

Andere Tipps

"Simple" und Arbeitslösung:

public class FormContainingListView : Form, IMessageFilter
{
    public FormContainingListView()
    {
        // ...
        Application.AddMessageFilter(this);
    }

    #region mouse wheel without focus

    // P/Invoke declarations
    [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 bool PreFilterMessage(ref Message m)
    {
        if (m.Msg == 0x20a)
        {
            // WM_MOUSEWHEEL, find the control at screen position m.LParam
            Point pos = new Point(m.LParam.ToInt32() & 0xffff, m.LParam.ToInt32() >> 16);
            IntPtr hWnd = WindowFromPoint(pos);
            if (hWnd != IntPtr.Zero && hWnd != m.HWnd && System.Windows.Forms.Control.FromHandle(hWnd) != null)
            {
                SendMessage(hWnd, m.Msg, m.WParam, m.LParam);
                return true;
            }
        }
        return false;
    }

    #endregion
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top