Laden...

DataGridView Position ScrollBar

Erstellt von zerberos vor 15 Jahren Letzter Beitrag vor 15 Jahren 1.122 Views
Z
zerberos Themenstarter:in
520 Beiträge seit 2007
vor 15 Jahren
DataGridView Position ScrollBar

Hallo,

ich habe 2 DataGridViews die genau geleich groß sind und srollbars haben

Jetzt möchte ich wenn die ScrollBar im DGV1 bewegt wird, die ScrollBar in DGV2 auf die gleiche Position bewegt wird.

Gibt es dafür eine Lösung?

T
177 Beiträge seit 2007
vor 15 Jahren

Hallo zerberos,

jo gibt es, und zwar wie folgt:


        [DllImport("user32.dll", CharSet = CharSet.Auto)]
        private static extern int SendMessage(IntPtr hWnd, int wMsg, IntPtr wParam, IntPtr lParam);

        private void dataGridView1_Scroll(object sender, ScrollEventArgs e)
        {
            VScrollBar myBar = null;
            foreach (Control c in dataGridView2.Controls)
            {
                if (c is VScrollBar) myBar = (VScrollBar)c;
            }
            if (myBar != null)
            {
                if (e.OldValue < e.NewValue)
                {
                    SendMessage(dataGridView2.Handle, 276, (IntPtr)1, myBar.Handle);
                }
                else
                {
                    SendMessage(dataGridView2.Handle, 276, (IntPtr)0, myBar.Handle);
                }
            }
        }

(Gestützt auf jomiquel's Post von weblogs.asp.net)

Bei Bedarf auf Erklärung sags einfach 😉

Mit freundlichen Grüssen
Tobias

Z
zerberos Themenstarter:in
520 Beiträge seit 2007
vor 15 Jahren

ja etwas bedarf auch Erklärung hab ich

und zwar
[DllImport("user32.dll", CharSet = CharSet.Auto)]

wofür brauch ich das?

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo zerberos,

das sagt dir die :rtfm: Doku.

herbivore

T
177 Beiträge seit 2007
vor 15 Jahren

Jo also

hier ma n MSDN Link

Das heisst du kannst so eine Windows DLL zum Beispiel importieren und deren Funktionen anschliessend verwenden.

So könntest du zum Beispiel auch ausm Code hinaus auf ein anderes offenes Programm zugreifen und bei diesem irgendwelche Klicks und Tastendrücke ausführen.

Könnte mir denken, dass Spiele Bots etwa so fungieren.

Wieso du das brauchst?
Weil es sofern ich herausgefunden habe, der einzige Weg ist das DGV2 zu scrollen.
Zuerst hab ich versucht einfach die Scrollbar zu scrollen, dementsprechend scrollte es aber den Inhalt nicht mit 🤔

Hoffe das erklärt es in etwa 🤔

Mit freundlichen Grüssen
Tobias

€dit: Oh da war jemand schneller 😁 Würd mich aber trotzdem interessieren ob meine Erklärung da in etwa hin kommt ^^

Z
zerberos Themenstarter:in
520 Beiträge seit 2007
vor 15 Jahren

Ok,

jetzt noch ein Problem,

wenn ich im DataGridView 1 Scrolle dann Scrollt der im DataGridView2 auch, aber viel zu schnell. Ich habe im DataGirdView 1 die Scrollliete minmal bewegt, da ist die im DataGridView2 schon ganz rechts

Habe Auf horziontal umgestellt


[DllImport("user32.dll", CharSet = CharSet.Auto)]
        private static extern int SendMessage(IntPtr hWnd, int wMsg, IntPtr wParam, IntPtr lParam);

        private void dataGridView1_Scroll(object sender, ScrollEventArgs e)
        {
            HScrollBar myBar = null;
            foreach (Control c in dataGridView2.Controls)
            {
                if (c is HScrollBar) myBar = (HScrollBar)c;
            }
            if (myBar != null)
            {
                if (e.OldValue < e.NewValue)
                {
                    SendMessage(dataGridView2.Handle, 276, (IntPtr)1, myBar.Handle);
                }
                else
                {
                    SendMessage(dataGridView2.Handle, 276, (IntPtr)0, myBar.Handle);
                }
            }
        }
T
177 Beiträge seit 2007
vor 15 Jahren

Ah sorry,

Moment! das is seltsam, hab nämlich selbst en fehler gemacht:

SendMessage(dataGridView2.Handle, 277, (IntPtr)1, myBar.Handle);

Die 276 steht für Horizontales scrollen und die 277 für vertikales, also is es bei dir eigentlich richtig 🤔

Das sind aber schon 2 Horizontale ScrollBars oder?

Mit freundlichen Grüssen
Tobias

€dit:
Ah hab den Fehler -.-
Jo mit horizontalen Scrollbars geht das afaik nicht, da du mit SendMessage nur in zellenschritten scrollen kannst.

Z
zerberos Themenstarter:in
520 Beiträge seit 2007
vor 15 Jahren

hat irgendwer anderes ne Lösung dafür?

google hat mich leider auch nicht wirklich weitergebracht....