Необходимо отобразить массив в MessageBox со строками имен назначений и столбцами имен учеников - PullRequest
0 голосов
/ 31 октября 2019

Мне нужно отобразить транспонированный массив оценок учеников при назначении в MessageBox. У меня часть транспонированного массива вниз, но мне нужно, чтобы в окне сообщения были метки строк и столбцов.

В настоящее время выходной MessageBox показывает только матрицу оценок 3 строки на 5 столбцов:

    decimal[,] decGrades = { { 87m, 88m, 89m },
                             { 90m, 95m, 100m },
                             { 70m, 80m, 90m },
                             { 50m, 50m, 50m },
                             { 80m, 92m, 94m } };

        string[] strStudentNames = { "Adams", "Benson", "Carson", 
  "Daley", "Edwards" };
        string[] strAssignmentNames = { "HW1", "HW2", "Exam1" };




    private decimal[,] TransposeMatrix(decimal[,] newArray)
    {
        decimal[,] TransposedArray = new decimal[newArray.GetLength(1), 
    newArray.GetLength(0)];
        for (int column = 0; column < newArray.GetLength(1); column++)
        {
            for (int row = 0; row < newArray.GetLength(0); row++)
            {
                TransposedArray[column, row] = newArray[row, column];

            }
        }
        return TransposedArray;
    }




    private void BtnTranspose_Click(object sender, EventArgs e)
    {
        decGrades = TransposeMatrix(decGrades);

        ////CODE TO SEND GRADES ARRAY TO MESSAGE BOX
        string gradesString = "";



        for (int i = 0; i < decGrades.GetLength(0); i++)
        {
            for (int j = 0; j < decGrades.GetLength(1); j++)
            {
                gradesString += decGrades[i, j] + " ";
            }

            gradesString += "\n";
        }

        MessageBox.Show(gradesString, "Transposed Array");

Кажется, я не могу понять, как отобразить значения строкового массива в strStudentNames в качестве меток столбцов и strAssignmentNames в качестве меток строк.

Я действительно ценю любую помощь, которую я мог получить в этом. Спасибо!

1 Ответ

0 голосов
/ 31 октября 2019

Вы можете попробовать это:

private void BtnTranspose_Click(object sender, EventArgs e)
{
  var matrix = TransposeMatrix(decGrades);

  // Create a form
  var form = new Form();
  form.Text = "Transposed Array";
  form.Size = new Size(500, 400);
  form.StartPosition = FormStartPosition.CenterParent;

  // Create a list view
  var listview = new ListView();
  listview.Dock = DockStyle.Fill;
  listview.View = View.Details;
  listview.FullRowSelect = true;

  // Initialize columns titles with first empty
  listview.Columns.Add("");
  for ( int indexD2 = 0; indexD2 < matrix.GetLength(1); indexD2++ )
    listview.Columns.Add(strStudentNames[indexD2]);

  // Add rows with first column as title
  for ( int indexD1 = 0; indexD1 < matrix.GetLength(0); indexD1++ )
  {
    var item = new ListViewItem();
    item.Text = strAssignmentNames[indexD1];
    for ( int indexD2 = 0; indexD2 < matrix.GetLength(1); indexD2++ )
      item.SubItems.Add(matrix[indexD1, indexD2].ToString());
    listview.Items.Add(item);
  }

  // Add the list view to the form and show it
  form.Controls.Add(listview);
  form.ShowDialog();
}

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

public partial MyMessageBox : Form
{
  static public Run(decimal[,] matrix, string[] titleColumns, string[] titleRows)
  {
    if ( titleColumns.Length != matrix.GetLength(1) 
      || titleRows.Length != matrix.GetLength(0) )
      throw new ArgumentException("Bounds mismatch");
    var form = new MyMessageBox();
    form.ListView.Columns.Add("");
    for ( int indexD2 = 0; indexD2 < matrix.GetLength(1); indexD2++ )
      form.ListView.Columns.Add(titleColumns[indexD2]);
    for ( int indexD1 = 0; indexD1 < matrix.GetLength(0); indexD1++ )
    {
      var item = new ListViewItem();
      item.Text = titleRows[indexD1];
      for ( int indexD2 = 0; indexD2 < matrix.GetLength(1); indexD2++ )
        item.SubItems.Add(matrix[indexD1, indexD2].ToString());
      form.ListView.Items.Add(item);
    }
    form.ShowDialog();  
  }
}

Таким образом, вы будете использовать его следующим образом:

private void BtnTranspose_Click(object sender, EventArgs e)
{
  MyMessageBox.Run(TransposeMatrix(decGrades), strStudentNames, strAssignmentNames);
}  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...