Пользовательское форматирование в ячейке в ObjectListView в C# - PullRequest
0 голосов
/ 08 апреля 2020

Я только собираюсь начать новый проект, в котором я надеюсь использовать ObjectListView. Я много читал на этом форуме, и есть одна вещь, которую я не совсем понял, возможно ли это с помощью ObjectListView (или FastObjectListView).

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

Пример варианта использования: if У меня есть ячейка, которая содержит следующую строку: «Привет, меня зовут Боб». Я надеюсь настроить таким образом, что только слово «my» выделено жирным шрифтом, а слово «is» имеет другой цвет (например, выделено красным).

Я смотрел на украшения ObjectListView и Я думаю, что это будет один маршрут, но я не был уверен, есть ли какой-то другой элемент управления в ObjectListView, который изначально позволил бы мне делать этот тип форматирования. Что-то, что я мог бы включить в обратный вызов FormatCell? Или возможно только применить форматирование ко всему строковому содержимому ячейки?

Любая помощь будет признательна!

1 Ответ

0 голосов
/ 08 апреля 2020

Может быть, вы можете использовать пользовательский рендер для достижения того, что вы хотите. Вы можете найти хороший пример здесь .

public class GradientRenderer : BaseRenderer
{
    public override void Render(Graphics g, Rectangle r) {
        using (LinearGradientBrush gradient = new LinearGradientBrush(r, Color.Gold, Color.Fuchsia, 0.0)) {
            g.FillRectangle(gradient, r);
        }
        StringFormat fmt = new StringFormat(StringFormatFlags.NoWrap);
        fmt.LineAlignment = StringAlignment.Center;
        fmt.Trimming = StringTrimming.EllipsisCharacter;
        switch (this.Column.TextAlign) {
            case HorizontalAlignment.Center: fmt.Alignment = StringAlignment.Center; break;
            case HorizontalAlignment.Left: fmt.Alignment = StringAlignment.Near; break;
            case HorizontalAlignment.Right: fmt.Alignment = StringAlignment.Far; break;
        }
        g.DrawString(this.GetText(), this.Font, this.TextBrush, r, fmt);
    }
}

Вы можете назначить визуализатор для ячейки, используя

myOlvColumn.Renderer = new GradientRenderer();

Вы можете попробовать сделать / нарисовать / наложить RichTextBox в ячейку. Это облегчит показ текста в индивидуальном формате. Не уверен, что это возможно.

...