Severus Josefsen Ответов: 2

Мой string.format не выравнивается так, как я хочу, можете ли вы определить ошибку?


Я пытаюсь выровнять строки с помощью string.format, но это не работает так, как я хочу.
Как это выглядит:
Programmering     P
Matematik       U
Engelska      V


Это и есть код:
public partial class Form1 : Form
    {
        List<string> kurs = new List<string>();
        List<string> lärare = new List<string>();
        public Form1()
        {
            InitializeComponent();
        }

        private void buttonSpara_Click(object sender, EventArgs e)
        {
            kurs.Add(textBoxKurs.Text);
            lärare.Add(textBoxLärare.Text);
            textBoxKurs.Text = string.Empty;
            textBoxLärare.Text = string.Empty;
            textBoxKurs.Focus();
        }

        private void buttonVisa_Click(object sender, EventArgs e)
        {
            listBoxOutput.Items.Add(string.Format("{0,-25} {1,-25}", "Kurs:", "Lärare:"));
            for (int i = 0; i < kurs.Count; i++)
            {
                listBoxOutput.Items.Add(string.Format("{0,-25} {1,-25}", kurs[i], lärare[i]));
            }
        }
    }


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

Я пробовал разные слова для строк и разные значения.

George Swan

Попробуйте использовать элемент управления ListView вместо ListBox и поместить текст в отдельных столбцах

2 Ответов

Рейтинг:
15

OriginalGriff

Это происходит потому, что шрифт, который ListBox использует для отображения строк, является пропорциональный шрифт: не все символы имеют одинаковую ширину. Например, "i" гораздо уже, чем "W", а "." действительно узок, в то время как "#" намного шире.

Измените свойство шрифта вашего списка на "Courier New", и вы получите текст, чтобы выстроиться так, как вы хотите. (Хотя тебе это не понравится!)


Рейтинг:
12

Maciej Los

Для отображения данных в табличной форме используйте Практическое руководство[^] контроль.

Вам нужно будет внести некоторые изменения в свой код:
1. Добавить новый класс:

public class Föremål
{
	public string Kurs { get; set; }
	public string Lärare { get; set; }
	
	public Föremål(string _kurs, string _lärare)
	{
		Kurs = _kurs;
		Lärare = _lärare;
	}
}


2. Добавить элемент управления datagridview на форму и изменить его название: DgvFöremåls

3. Затем в форму:
public partial class Form1 : Form
    {
        List<Föremål> föremåls = new List<Föremål>();
        BindingSource bs = new BindingSource();
        public Form1()
        {
            InitializeComponent();
        }

        private void buttonSpara_Click(object sender, EventArgs e)
        {
            Föremål f = new Föremål(textBoxKurs.Text, textBoxLärare.Text)
            föremåls.Add(f);
            textBoxKurs.Text = string.Empty;
            textBoxLärare.Text = string.Empty;
            textBoxKurs.Focus();
            bs.DataSource = föremåls;
            DgvFöremåls.DataSource = bs;
        }

    }


Для получения более подробной информации, пожалуйста, смотрите: Привязка данных к элементу управления DataGridView - Windows Forms | Microsoft Docs[^]