Laden...

Externe ScrollBar für Panel

Erstellt von darefilz vor 16 Jahren Letzter Beitrag vor 16 Jahren 2.474 Views
D
darefilz Themenstarter:in
123 Beiträge seit 2004
vor 16 Jahren
Externe ScrollBar für Panel

Hallo, ihr lieben.

Ich möchte gerne ein Panel über eine eigene ScrollBar steuern.
Das scheint irgendwie schwieriger zu sein als erwartet...

Also, ich habe AutoScroll auf false und AutoScrollMinSize auf (0; 0), da die ScrollBars vom Panel ja niemals angezeigt werden sollen.

Im Scroll-EventHandler meiner eigenen ScrollBar habe ich folgendes stehen:


this.panel1.VerticalScroll.Value = this.vScrollBar1.Value;

Das funktioniert auch eigentlich ganz gut, aber bei jedem Scroll flackert die Panel interne ScrollBar einmal kurz auf.
Sieht natürlich total kacke aus!

Weiß da vielleicht jemand Abhilfe?

Vielen Dank

2.921 Beiträge seit 2005
vor 16 Jahren

Tja, das solltest Du mal genauer beantworten... dann können wir dann auch eine Antwort geben.

Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.

1.378 Beiträge seit 2006
vor 16 Jahren

Ich habe es nicht geschafft, den AutoScrollWert von einem Panel zu verändern ohne das diese Scrollbar aufflackert und ich denke fast das es auch nicht möglich ist - zumindest auf diesem Weg.

Ich hab mir bei meinen Scrollaufgaben so geholfen, das ich 2 Panels verwende:

Das erste Panel stellt das Panel dar, das du bereits hast und das 2te wäre ein Panel im ersten Panel das wiederum alle Controls beinhält das im Moment dein erstes hat.

Wenn du jetzt mit deiner Scrollbar scrollst, brauchst du nur die Position des inneren Panels verändern.

Diese Methode verwende ich um (in diesem Fall eine vertikale Scrollbar) zu aktualisieren (falls die Größe des Panels ändert, oder aber der Content im Panel).


        private void actualizeScrollBar()
        {
            int max_Y = pnlMain.Height;

            //--------------------------------------------------------------------------------------
            //die dicke einer Scrollbar
            int width = vScrollBar1.Width;
            //--------------------------------------------------------------------------------------

            //--------------------------------------------------------------------------------------
            //die differenz von MainPanel.size zu SubPanel.size
            int diff_Y = max_Y - panelScroll.Height;
            //--------------------------------------------------------------------------------------

            //--------------------------------------------------------------------------------------
            //Wenn Sub>Main zeige ScrollPanels und passe Position an

            if (diff_Y > 0)
            {
                vScrollBar1.Visible = true;
                vScrollBar1.Maximum = diff_Y;
                vScrollBar1.SmallChange = 1;

                vScrollBar1.LargeChange = diff_Y / 4;
                vScrollBar1.Maximum += vScrollBar1.LargeChange;
            }
            else vScrollBar1.Visible = false;
            //--------------------------------------------------------------------------------------

            if (!vScrollBar1.Visible) vScrollBar1.Value = 0;

            scroll();
        }

Und so schaut dann die Methode aus, die das Scrollevent ausführt.


        private void scroll() { pnlMain.Location = new Point(0, -vScrollBar1.Value); }

D
darefilz Themenstarter:in
123 Beiträge seit 2004
vor 16 Jahren

Danke erstmal.

Mit zwei Panels hatte ich das auch schon, funktiert auch, aber gefällt mir nicht.
Und ehrlich gesagt, ist selbst die Variante mit der externen ScrollBar nicht mein Favorit.

Hm... hätte ich vielleicht mal direkt mal angesprochen, aber ich vermute, dass mir da nicht helfen ist:
Am liebsten möchte ich nämlich die ScrollBars des Panels komplett durch meine eigenen ersetzen.
Am besten so, dass ich am Ende ein einziges Control habe. Und halt nicht zwei oder sogar drei.

Hat damit schonmal jemand zu tun gehabt?

1.378 Beiträge seit 2006
vor 16 Jahren

Du kannst die 2-3 Controls auch zusammen in ein neues Control packen.

D
darefilz Themenstarter:in
123 Beiträge seit 2004
vor 16 Jahren

Ja, ich weiß.
Ich bin nur auf der Suche nach einer eleganten Lösung.
Würde mich aber nicht wundern, wenn es die für mein Problem nicht gibt.