Как установить количество элементов в нарисованном владельцем списке

Я реализовал методы MeasureItem и DrawItem в своем исправленном списке C#, нарисованном владельцем.

Ничего не появляется.

В отчаянии я добавил три случайные строки в коллекцию Items, и ПОЯВИЛИСЬ ПЕРВЫЕ ТРИ МОИХ ПУНКТА!

Это говорит мне, что список не знал, что есть элементы. Должен ли я добавлять сотни фиктивных предметов в коллекцию «Предметы» только для того, чтобы увидеть МОИ предметы?? Это дингбатти; Должен быть способ СКАЗАТЬ в списке, сколько элементов есть - я просто не могу его найти!

Как вы устанавливаете количество элементов в нарисованном владельцем списке?

Код:

private void listVersions_MeasureItem (object sender, MeasureItemEventArgs e)
{
    e.ItemHeight = font.Height + 6;
}

private void listVersions_DrawItem (object sender, DrawItemEventArgs e)
{
    if (entries == null)
        return;

    int i = e.Index;

    if (i < 0 || i >= entries.Count)
        return;

    e.Graphics.FillRectangle (new SolidBrush (BackColor), e.Bounds);
    VersionEntry ent = entries[i];
    Rectangle rect = e.Bounds;
    Graphics g = e.Graphics;

    g.DrawString (i.ToString () + "  " + ent.name, font, Brushes.Black, rect.Location);
}

person user20493    schedule 21.11.2013    source источник
comment
Можете ли вы показать свой код?   -  person crthompson    schedule 22.11.2013
comment
Прикрепите это к своему сообщению.. это будет выглядеть намного лучше. Кроме того, возможно, вы ищете OnPropertyChanged?   -  person crthompson    schedule 22.11.2013
comment
Я не понимаю, как может помочь OnPropertyChanged; ничего не меняется: я просто хочу отобразить список.   -  person user20493    schedule 22.11.2013
comment
элементы — это список, содержащий элементы для рисования. Вся цель списка, нарисованного владельцем, состоит в том, чтобы отображать записи. И когда я добавляю фиктивные элементы в коллекцию Items, элементы записей отображаются правильно. ВЫГЛЯДИТ, ЧТО ЕДИНСТВЕННАЯ ПРОБЛЕМА СООБЩАЕТ СПИСКУ, СКОЛЬКО ЭЛЕМЕНТОВ ЕСТЬ.   -  person user20493    schedule 22.11.2013


Ответы (2)


Попробуйте сделать DataSource вашего ListBox вашей коллекцией записей:

listVersions.DataSource = entries
person LarsTech    schedule 21.11.2013

Это может помочь: http://msdn.microsoft.com/en-us/library/windows/desktop/bb761340%28v=vs.85%29.aspx

У них (предположительно) есть сообщение LB_SETCOUNT, которое можно отправить в список.

Microsoft действительно должна предоставить метод SetCount() в CListBox, но они часто не учитывают методы, необходимые для неигровых приложений. Гррр...

person Alan8    schedule 11.05.2014