Настройка цвета строки заголовка

#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 для этого столбца.