Member 14908979 Ответов: 1

Как я могу выровнять 2 набора строк в элементе checkedlistbox в WPF с помощью C#?


У меня есть 2 набора переменных. Который считывает некоторые строковые данные из файла. Я хочу отобразить его в checkedlistbox с некоторым правильным выравниванием. первая строка должна быть выровнена по левому краю, а другая-по правому.

Например:
ниже приведен список элементов, которые будут отображаться, где [] указывает флажок:
[] ABCDEFGHI             1233434
[] asfsad               2342dvdg
[] dfg2542323         dfhgdsfhdf
Я хочу, чтобы строки были выровнены, как указано выше. Не могли бы вы помочь достичь этого результата?

Что я уже пробовал:

Я попробовал с string.format Также используются методы Padleft и Padright.

0x01AA

Если вы хотите решить эту проблему с помощью отступов, вам нужно выбрать "шрифт фиксированной ширины" / "моноширинный шрифт". Моноширинный шрифт - Википедия[^]

Maciej Los

Самый простой способ-создать пользовательский элемент управления с 2 встроенными элементами управления.

1 Ответов

Рейтинг:
1

Sandeep Mewara

Одним из решений может быть:
Учитывая, что текст элемента checkboxlist взят из двух разных источников, имейте предопределенную длину текста (скажем, 40), а затем поместите строки слева направо (индекс 0) и поместите другую строку данных из конца (длина индекса). Заполните среднее левое пространство пробелом.

Таким образом, у вас будет вид, как указано выше.

PS: Если вы определили длину двух строк, было бы проще оптимизировать их. База здесь заключается в том, чтобы играть с длиной.

Кстати, для вышеизложенного вы можете использовать конкатенацию строк и PadRight[^]/Padleft[^] методы с определенными длинами.

ОБНОВЛЕНИЕ:
Быстрая попытка на скрипке .NET: Фиксированной длины текста может иметь padleft и padright [^]
Это показывает:

String first ="firstone";
String second ="secondone";
String needed = first.PadRight(25,' ') + second.PadLeft(25, ' ');
Console.WriteLine(needed);
Console.WriteLine("lenght: "+ needed.Length);

//Output as:
firstone                                 secondone
lenght: 50


0x01AA

Работает только для моноширинных шрифтов ;)

Sandeep Mewara

Держать - погугли что моноширинных шрифтов :Д

Sandeep Mewara

Ах да. Фиксированное реальное состояние. Правда.

Не начиная с какой-либо длины, как мы можем сохранить реальное состояние тоже частью его?

Sandeep Mewara

Взгляните на эту скрипку .NET: https://dotnetfiddle.net/7gpT9R

С фиксированной длиной выглядит хорошо - должно быть хорошо в любом шрифте.

0x01AA

Попробуйте сделать это, например, с Arial, и вы увидите, что это не работает. Ваша ссылка показывает консольное приложение, которое, как я знаю, по умолчанию использует шрифт fix width. Но я могу ошибаться...

Maciej Los

Хорошая мысль, Бруно!

0x01AA

Спасибо Мацей

0x01AA

Посмотрите здесь (оба списка флажков содержат точно такие же данные.): CP.31-08-2020_15-40-14.png (5.9 КБ)

Или здесь (WPF и многое другое, что запросил OP): CP.31-08-2020_16-23-33.png (10 КБ)

Sandeep Mewara

:большой палец вверх:

так что, если это тоже необходимо, мы здесь что-то еще/еще.