Изменить элементы listBox во время выполнения в С#

Я написал код, который добавляет некоторые элементы в список во время выполнения, теперь я не могу понять, как получить доступ к свойствам этих элементов (в частности, к FontSize).

Здесь есть какой-то код

 for (int i = 0; i < list.Count; i++)
      {
          trainerRoutine Item = list[i];
          routines_lst.Items.Add(Item.name);
      }

person Daniele Kerberos    schedule 08.04.2012    source источник
comment
См. stackoverflow.com/questions/8835568/ для аналогичного вопроса; Вы можете обрабатывать события DrawItem или MeasureItem; вы не можете сделать это при добавлении элемента.   -  person dash    schedule 09.04.2012


Ответы (2)


Учитывая, что, как и элемент ListBox, вы добавляете элемент Item.Name, который, как я полагаю, представляет собой простую строку, я бы сказал, что для свойства Font вы должны искать не внутри элемента, а внутри самого ListBox.

person Tigran    schedule 08.04.2012
comment
Дело в том, что мне нужно иметь разные размеры для каждого элемента, возможно ли это? - person Daniele Kerberos; 09.04.2012
comment
Если вы используете wpf, это возможно, но вам нужно иметь дело с item template и реальной шириной элемента, рассчитанной с помощью GC.MeasureString - person Tigran; 09.04.2012

Очень трудно понять, как «trainerRoutine» может иметь какое-либо отношение к FontSize. Как правило, ListBox хранит объекты. Вы помещаете строки в коллекцию Items, используя Item.name. Это хлопотно, вы не можете так легко вернуться от этой строки к исходному объекту. Да и не нужно, просто можно просто добавить Item. Единственное, что вам нужно сделать, это переопределить метод ToString() класса Item, который ListBox использует для создания читаемой строки. Так:

class DontKnowWhat {
   // properties and methods
   //...
   public override string ToString() {
      return name;
   }
}

Теперь вы можете просто вернуть исходный объект из коллекции ListBox.Items, приведя его к типу DontKnowWhat.


На всякий случай, если вы говорите об изменении размера шрифта для элемента, интерпретация хрустального шара номер 2, для этого требуется установить для свойства DrawMode ListBox значение DrawMode.OwnerDrawVariable. В статье MSDN есть хороший пример этого.

person Hans Passant    schedule 08.04.2012
comment
Я думаю, что ОП был после того, как изменить размер шрифта элементов в ListBox; в отличие от ASP.Net, WinForms (при условии, что это WinForms) делает это немного более запутанным. - person dash; 09.04.2012
comment
Я не добавлял другие детали только потому, что они бесполезны. - person Daniele Kerberos; 09.04.2012