Форматирование 2D-массива в текстовом поле - PullRequest
0 голосов
/ 12 апреля 2019

Я пытаюсь отобразить что-то вроде этого в текстовом поле.

Name    Test    Basket  Destructive   Final Grade
--------------------------------------------------
Alex    0       0        0            0
Danny   0       0        0            0
Dave    0       0        0            0

Вот что я получаю:

Name    Test    Basket  Destructive   Final Grade
--------------------------------------------------
Alex       0           0         0            0
Danny      0           0         0            0
Dave       0           0         0            0

Это хуже, потому что я думаю, что 0 находятся в неправильном месте.

Идея в том,чтобы столбцы были вверху, а внизу они должны выглядеть примерно так:

Name - Grade 1 - Grade 2 - Grade 3 - Final Grade

Что я делаю не так?

Я тоже ужасно отношусь к циклам, поэтому я считаю, что 0 находятся не в том месте.

string[] Columns = { "Name","Test", "Basket","Destructive","Final Grade"};
string[] Names = { "Alex", "Danny", "Dave", "Goerge", "Hannan", "Ian", "Muna" };     

int[,] Grade = new int[7, 3];
int[] FinalGrade = new int[7];

private void uiShowMarksAZButton_Click(object sender, EventArgs e)
{
        //test
        Grade[0, 0] = 10;
        //test

        uiMarksDisplayTextBox.Text = string.Join("\t", Columns);
        uiMarksDisplayTextBox.Text += System.Environment.NewLine;

        for (int i = 0; i < Names.Length; i++ )
        {                
            uiMarksDisplayTextBox.Text += (Names[i]);
            for (int x = 0; x < 3; x++)
            {
                uiMarksDisplayTextBox.Text += ("\t" + Grade[x, x]);                  
            }
            uiMarksDisplayTextBox.Text += System.Environment.NewLine;
        }            
    }

РЕДАКТИРОВАТЬ 1: чтобы добавить некоторые пояснения, мой профессор получил макет формы, мне не разрешено изменять его или текстовое поле, то есть я не могу использовать сетки данных или представления списка.

Когда я вводю оценки Алекса, это выглядит примерно так:

Name    Test    Basket  Destructive   Final Grade
-------------------------------------------------
Alex    10      0       0
Danny   10      0       0
Dave    10      0       0
George  10      0       0
Hannan  10      0       0
Ian     10      0       0
Muna    10      0       0

Почему все 0 находятся не в том месте?

1 Ответ

0 голосов
/ 12 апреля 2019

Итак, во-первых, вы можете просто использовать пробелы табуляции для выравнивания всего в столбцах.Затем вам нужно настроить индексацию, есть некоторые опечатки, а также отсутствует итоговая оценка.Самая длинная текстовая строка длиннее обычного пространства табуляции, поэтому было бы хорошо отрегулировать пространство табуляции.Это можно сделать, как описано в ответе

Как установить ширину вкладки в элементе управления TextBox в Windows Forms?

В следующем коде содержится все это, такженужна функция SendMessage из ответа выше

using (Graphics graphics = uiMarksDisplayTextBox.CreateGraphics())
{
    int nMaxLength = (int)Columns.Concat(Names).Max(c => graphics.MeasureString(c + " ", uiMarksDisplayTextBox.Font).Width);
    SendMessage(uiMarksDisplayTextBox.Handle, EM_SETTABSTOPS, 1, new int[] { nMaxLength });
}

uiMarksDisplayTextBox.Text = string.Join("\t", Columns);
uiMarksDisplayTextBox.Text += System.Environment.NewLine;

for (int i = 0; i < Names.Length; i++)
{
    uiMarksDisplayTextBox.Text += Names[i];
    for (int x = 0; x < 3; x++)
    {
        uiMarksDisplayTextBox.Text += "\t" + Grade[i, x];
    }
    uiMarksDisplayTextBox.Text += "\t" + FinalGrade[i];
    uiMarksDisplayTextBox.Text += System.Environment.NewLine;
}
...