Надо, чтобы выделенная строка в ListBox
была больше (или меньше) остальных. Включаю OwnerDrawVariable
и пишу код:
private void listBox1_MeasureItem(object sender, MeasureItemEventArgs e)
{
int n = listBox1.SelectedIndex == e.Index ? 30 : 14;
System.Diagnostics.Debug.WriteLine($"index measured: {e.Index}, selected: {listBox1.SelectedIndex}, n: {n}");
e.ItemHeight = n;
}
private void listBox1_DrawItem(object sender, DrawItemEventArgs e)
{
if (e.Index >= 0)
{
bool isSelected = (e.State & DrawItemState.Selected) == DrawItemState.Selected;
string t = listBox1.Items[e.Index].ToString();
e.Graphics.DrawString(t, listBox1.Font, Brushes.Lime, new PointF(0.0f, e.Bounds.Y));
if (isSelected)
{
e.Graphics.DrawRectangle(Pens.White, e.Bounds);
}
}
}
private void listBox1_DragEnter(object sender, DragEventArgs e)
{
e.Effect = DragDropEffects.Copy;
}
private void listBox1_DragDrop(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop))
{
string[] strings = (string[])e.Data.GetData(DataFormats.FileDrop);
listBox1.Items.AddRange(strings);
}
}
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
listBox1.Refresh();
}
Однако, все строчки всегда выводятся одинакового размера. Если я правильно понял, в DrawItem
e.Bounds
должен приходить тот, что был установлен в Measureitem
. Но он для всех айтемов приходит одинаковый.
Что я опять упустил?