C # Установите ширину ListBox, чтобы поместился самый длинный элемент - PullRequest
3 голосов
/ 19 мая 2011

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

Учитывая, что я не уверен, сколько пикселей будет иметь данная строка, я не уверен, как рассчитать эту ширину.

Ответы [ 3 ]

6 голосов
/ 19 мая 2011

Полагаю, вы ищете метод MeasureString класса Graphics.

Попробуйте:

Graphics graphics = this.createGraphics();
SizeF mySize = graphics.MeasureString("Ahoy there", this.Font);

Надеюсь, это поможет!

0 голосов
/ 05 июля 2012

Это сработало для меня, только когда я изменил ширину списка, я увидел желаемые результаты.Я перебрал элементы списка, чтобы получить самое длинное.Надеюсь, это поможет.

int LongestItemLength = 0;
for (int i = 0; i < listBox1.Items.Count;i++ ){
    Graphics g = listBox1.CreateGraphics();
    int tempLength = Convert.ToInt32((
            g.MeasureString(
                    listBox1.Items[i].ToString(), 
                    this.listBox1.Font
                )
            ).Width);
    if (tempLength > LongestItemLength){
        LongestItemLength = tempLength;
    }
}
listBox1.Width = LongestItemLength;
listBox1.Show(); 
0 голосов
/ 19 мая 2011

Это может быть то, что вы хотите. Также поиграйте с Integral Height и отступом.

http://www.codeproject.com/KB/combobox/resizablelistbox.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...