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.
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;
}