2015-03-09 3 views
0

У меня есть список с двумя столбцами в ней и заполняя его таким образом:Добавление пробельные к многоколоночным Listbox в Winforms

  list.Items.Add(string.Format("{0} {1}","header1","header2")); 

      for (int i = 0; i < column1.Count;i++) 
      { 
       list.Items.Add(string.Format("{0} {1}", column1[i], column2[i])); 
      } 

То, что я хочу сделать, это положить пробельные в ней, не делая это самостоятельно (без увеличения разрыва между {0} и {1}). Поэтому в соответствии с длиной столбцов (столбец1 - цифры и столбец2 - строки) они должны быть в середине строк «header1» и «header2», и также должен быть пробел (допустим, около 10 символов) между заголовки. Я знаю, что есть что-то вроде «PadRight», но не знаю, как использовать это здесь. Это возможно? Спасибо!

PS: Я не хочу использовать ListView

Это должно выглядеть примерно так:

"header1"   "header2" 
    1    Name1 
    3    Name2 
    10    Name234 
    101    Name10   
+0

PadRight будет работать только в том случае, если вы используете моноширинный шрифт. Вы уверены, что это список, который вам нужен, а не DataGrid? – Sayse

+0

Да. Но только если это возможно со списками. – Takeda15

+0

Извините, я не понял ваш последний комментарий. Если вы начнете пытаться массировать данные ... Я только что искал в google для «столбца столбца с столбцом C#» и [это был первый результат] (https://msdn.microsoft.com/ru -us/library/system.windows.forms.listbox.multicolumn% 28v = vs.110% 29.aspx), который выглядит точно так же, как вы должны использовать (свойство ListBox.MultiColumn). У него даже есть пример – Sayse

ответ

0

Попробуйте что-то вроде этого:

list.Items.Add(string.Format("{0,20} {1,20}","header1","header2")); 

    for (int i = 0; i < column1.Count;i++) 
    { 
     list.Items.Add(string.Format("{0,20} {1,20}", column1[i], column2[i])); 
    } 

Edit (Имейте в виду, что это отнюдь не является оптимальным решением): Если вы хотите, чтобы значения в столбцах были ближе к середине, просто добавьте больше пробелов в временную переменную.

 string header1 = "Header_1"; 
     string header2 = "Header_2"; 
     int clmnWidth = 50; 

     // Centered columns headers 
     this.listBox1.Items.Add(string.Format("|{0}|{1}|", 
       header1.PadLeft(clmnWidth/2).PadRight(clmnWidth - header1.Length), 
       header2.PadLeft(clmnWidth/2).PadRight(clmnWidth - header2.Length))); 

     string temp = "  "; 
     for (int i = 0; i < clmn1.Length; i++) 
     { 
      this.listBox1.Items.Add(String.Format("|{0}|{1}|", 
       temp + clmn1[i].ToString().PadRight(clmnWidth - clmn1[i].ToString().Length - temp.Length), /*.PadLeft(clmnWidth/2)*/ 
       temp + clmn2[i].ToString().PadRight(clmnWidth - clmn2[i].ToString().Length - temp.Length))); /*.PadLeft(clmnWidth/2)*/ 
     } 
+0

Это просто сдвигает строки, и когда у меня больше целое число, оно полностью сломано. – Takeda15

+0

А что теперь? – eren

+0

Это прекрасно работает! Большое спасибо! – Takeda15

0

Другой способ сделать это без моноширинный шрифт является использование символа табуляции: (? Или даже два ListBox рядом друг с другом)

listBox1.Items.Add("  " + column1[i] + "\t" + column2[i]); 

Но, другой контроль, как DataGridView или ListView бы более гибкой и удобной в настройке.