Размер ширины списка зависит от длины текста
У моего приложения есть окно с ListBox внутри, которое заполнено текстом, который изменяется со временем, поэтому записи в Listbox могут иметь несколько длин.
Я бы хотел, чтобы окно и ширина списка менялись динамически в зависимости от длины записей в списке (в количестве символов).
Например, если в моем списке есть несколько записей и максимальная длина составляет 30 символов, я хочу сделать окно и его список больше по ширине, чем одно окно, длина которого составляет 20 символов.
Каков наилучший способ сделать это?
3 ответа
Попробуйте что-то вроде этого:
// find the longest item
CString longest;
for (int i = 0; i < m_list.GetCount(); ++i)
{
CString temp;
m_list.GetText(i, temp);
if (temp.GetLength() > longest.GetLength())
longest = temp;
}
// get the with of the longest item
CSize size = GetWindowDC()->GetTextExtent(longest);
// you need this to keep the current height
RECT rect;
m_list.GetWindowRect(&rect);
// change only width
int width = size.cx;
int height = rect.bottom - rect.top;
m_list.SetWindowPos(NULL, 0, 0, width, height, SWP_NOZORDER | SWP_NOMOVE);
Попробуй это:
int maxcol = ((CHeaderCtrl*)(listctrl.GetDlgItem(0)))->GetItemCount()-1;
for (int col = 0; col <= maxcol; col++)
{
listctrl.SetColumnWidth(col, LVSCW_AUTOSIZE_USEHEADER);
}
Какую платформу программирования вы используете? Я предполагаю.NET и VB.
Вставьте метод для проверки содержимого списка и измените размер поля и окна, как требуется:
Dim intMaxLength As Integer = 20
For Each myItem As String In ListBox1.Items
If Len(myItem) > intMaxLength Then
'Number of characters times number of pixels per character
ListBox1.Width = Len(myItem) * 10
'Me refers back to the form object
'Add a few extra pixels to give space around your listbox
Me.Width = Len(myItem) * 10 + 30
End If
Next
Надеюсь, это даст вам достойную отправную точку.