#c# #objectlistview
#c# #objectlistview
Вопрос:
Я использую objectlistview в своем проекте, в конструкторе у меня есть такой код :
foreach (OLVColumn item in olv.AllColumns)
{
item.Width = -2;
var headerstyle = new HeaderFormatStyle();
headerstyle.SetFont(new Font(new FontFamily("Segoe UI"), 12.0f, FontStyle.Bold));
headerstyle.SetBackColor(Color.FromArgb(16, 16, 16));
headerstyle.SetForeColor(Color.White);
item.HeaderFormatStyle = headerstyle;
}
Этот код придает моим строкам приятный задний цвет и устанавливает значения по умолчанию. Это работает, и результат выглядит следующим образом :
Но в конце строки заголовка есть это:
Существует небольшой пробел с белым (по умолчанию) цветом фона. Я могу исправить это, немного увеличив размер столбца категории, но пользователю разрешено скрывать и изменять ширину столбцов, поэтому это не решит мою проблему. Как я могу добраться до этого белого пятна в коде? Я проверил http://objectlistview.sourceforge.net/cs/recipes.html#how-do-i-change-the-font-or-color-of-the-column-headers но не смог найти решение.
Комментарии:
1. Не уверен, правильно ли я понимаю вашу проблему, но есть свойство столбца
FillsFreeSpace
. Когда вы устанавливаете его вtrue
соответствующий столбец, он растягивается, чтобы заполнить весь OLV. Это должно устранить «пробел».2. FillsFreeSpace решил проблему, по крайней мере, он скрывает белую часть без заголовка, но я предпочитаю изменить цвет этой части без заголовка, чтобы мне не приходилось заставлять пользователя видеть столбец во всем listview, есть ли способ для этого?
3. Я не думаю, что это возможно с использованием встроенных функций OLV.. Но простым обходным решением было бы вставить фиктивный столбец с пустым текстом заголовка в качестве последнего столбца с
FillsFreeSpace
установленным значениемtrue
.4. Это было бы хорошим решением, но как насчет множественного выбора с помощью перетаскивания мышью? Поскольку в этой небольшой части после категории нет заголовка, я могу выбрать несколько элементов перетаскиванием мыши. Если я заполню этот пробел пустым столбцом, как вы сказали, я больше не смогу перетаскивать мышь для множественного выбора. Кроме того, я не могу установить для FullRowSelect значение false, потому что мой первый столбец — это столбец значков, поэтому, если я закрою FullRowSelect, с выделением становится действительно сложно справиться.
5. Действительно ли выбор последнего столбца в FullRowSelect является проблемой? ИМО это даже выглядит лучше, чем отрезанная строка выделения. Я понимаю вашу точку зрения в отношении выбора перетаскивания. Если вам это действительно нужно, вам, вероятно, придется попробовать реализовать свою собственную логику выбора перетаскивания при нажатии и удержании в любом месте OLV.
Ответ №1:
Можно сделать так, чтобы столбец автоматически заполнял свободное горизонтальное пространство, установив для свойства FillsFreeSpace
значение true
.
Если нежелательно, чтобы один из основных столбцов растягивался до общей ширины, фиктивный столбец (с пустым текстом заголовка), для которого FillsFreeSpace
установлено значение true, может быть вставлен в качестве последнего столбца. вероятно, было бы целесообразно установить Hideable
и IsEditable
false
для этого столбца.