C# - ListView Column Headers Resizen gaat niet snel genoeg

Status
Niet open voor verdere reacties.

blackeagle67

Gebruiker
Lid geworden
13 okt 2009
Berichten
158
Hallo Helpmij pplz,

Ik ben momenteel bezig om ervoor te zorgen dat mijn ListView Column Headers kunnen resizen zonder dat de scrollbar in de listview komt te staan.
Zie code onder.
Dit is mij redelijk gelukt met de code die hieronder te zien is (tips zijn welkom als hier dingen in staan die anders zouden moeten/kunnen).
Ik resize alleen de eerst volgende column als die bestaat zodat ik niet alle columns hoef te checken.

Nu alleen het probleem dat de resize event niet snel genoeg getriggered word.
Als ik echt heel snel mijn muis beweeg bij het slepen dan word mijn listview steeds "langer" bij wijze van en verschijnt de scrollbar.

Nu de vraag dus, kan ik hier zo wat aan doen?
Ik doe nog niks met de totale grootte van de listview dus misschien moet ik daar eens naar kijken, maar hebben jullie tips?
Voorbeelden in de goede richting?

B.V.D.

Code:
/// <summary>
        /// the column that is resizing is sent as follows: COLUMN --> | ("|" respresents the right edge of the column)
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void ColumnWidthChanging(object sender, ColumnWidthChangingEventArgs e)
        {
            if (AmIResizing)
                return;

            // set flag so it immediately gets out after first time started
            AmIResizing = true;

            int _minWidth = 30;
            ListView i = (ListView)sender;

            // check if there is a next column
            // if not, do not let the user resize this column
            if ((e.ColumnIndex + 1) < i.Columns.Count)
            {
                // the current width is great than the new width
                // if so add the offset to the next column
                if (i.Columns[e.ColumnIndex].Width > e.NewWidth)
                {
                    if (e.NewWidth > _minWidth)
                    {
                        i.Columns[e.ColumnIndex + 1].Width += (i.Columns[e.ColumnIndex].Width - e.NewWidth);
                    }
                    else
                    {
                        e.Cancel = true;
                        e.NewWidth = i.Columns[e.ColumnIndex].Width;
                        i.Columns[e.ColumnIndex].Width = _minWidth;
                    }
                }
                // the new width is greater than the current width
                // if so substract the offset off of the next column
                else
                {
                    if (i.Columns[e.ColumnIndex + 1].Width > _minWidth)
                    {
                        i.Columns[e.ColumnIndex + 1].Width -= (e.NewWidth - i.Columns[e.ColumnIndex].Width);
                    }
                    else
                    {
                        e.Cancel = true;
                        e.NewWidth = i.Columns[e.ColumnIndex].Width;
                        i.Columns[e.ColumnIndex + 1].Width = _minWidth;
                    }
                }
            }
            else
            {
                e.Cancel = true;
                e.NewWidth = i.Columns[e.ColumnIndex].Width;
            }
            // Now, clear the flag
            AmIResizing = false;
        }
 
He,

Ben nu van dit idee afgestapt en over gegaan op datagridview.
Doet schijnbaar al veel van wat ik wil uit zichzelf.

Zit nu alleen met de autosize van de datagridview die ik niet fijn vind.
Ik zou graag zien dat ik dat als ik de kolommen resize met de muis alleen de voorste of achterste kolom resized i.p.v. alle (wat ik nu heb).

Kunnen jullie mij helpen?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan