Все,Custom ListBox: Элегантная и эффективная реализация?
В настоящее время я работаю над настройкой ListBox, чтобы улучшить ясность моего приложения. В принципе, довольно легко найти «как» для этой цели, что приведет к моему текущему результату ниже.
Current display http://www.freeimagehosting.net/uploads/2967c2c763.png
Я счастлив с дисплеем, но ... Я столкнулся странное поведение с помощью колесика мыши. Я пытался найти информацию по этому вопросу, и я нашел эту статью:
http://aviationxchange.net/wikis/winforms/net-color-listbox.aspx
, которые указывают на то, что проблема MouseWheel не только один (простое копирование/вставка из ссылки)
- Горизонтальная полоса прокрутки исчезла. Строки с фиксированной длиной меньше , чем ширина управления может быть . Что делать, если элемент управления изменен?
- Если вы пытались использовать мышь колесо, вы можете заметить, что выбранный элемент перемещается вверх и вниз хаотично, когда колесо прокрутки перемещается.
- Превосходные методы OnPaint() OnPaintBackGround() не Работа на всех. Просто они не подключены к событиям. Фон - , написанный только через сообщения Windows.
Это дает некоторые советы по исправлению этих проблем, но я чувствую себя весьма расстроенным, чтобы реализовать все эти «обходные пути» для отображения пользовательского списка. Я что-то пропустил? есть ли какой-либо элемент управления winform, который позволяет мне использовать такие же настройки, но более чистым/элегантным способом? Мне не удалось найти дополнительную информацию:/
Ниже приведена соответствующая часть пользовательской части чертежа, но я не уверен, что проблема отображения действительно основана на реализации метода overriden, больше на самом элементе управления ,
public RecordListBox(): base()
{
mListBox = this;
mListBox.DrawItem += new DrawItemEventHandler(mListBox_DrawItem);
mListBox.MeasureItem += new MeasureItemEventHandler(mListBox_MeasureItem);
this.DrawMode = DrawMode.OwnerDrawFixed;
}
public void mListBox_DrawItem(object sender, DrawItemEventArgs e)
{
if (this.DesignMode) return;
e.DrawBackground();
e.DrawFocusRectangle();
// drawing actions
}
public void mListBox_MeasureItem(object sender, MeasureItemEventArgs e)
{
e.ItemHeight = 40;
}
С уважением,
Чтобы найти какое-либо решение, я думаю, нам сначала нужно будет увидеть источник вашей пользовательской реализации, чтобы увидеть, что может вызвать странное поведение, ваш вопрос подобен «Я сделал этот код , это ошибка, теперь что с этим не так? " Это не поможет, если мы не увидим код. – caesay