【问题标题】:Need to display an array to a MessageBox with rows of Assignment Names and columns of Student Names需要在 MessageBox 中显示一个数组,其中包含作业名称的行和学生姓名的列
【发布时间】:2020-02-26 07:22:15
【问题描述】:

我需要将学生作业成绩的转置数组显示到 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 显示为行标签。

非常感谢我能在这方面获得的任何帮助。谢谢!

【问题讨论】:

  • MessageBox 不是表格数据的合适 UI 元素。它不是为此而设计的。它旨在传达状态消息,例如错误和任务完成。您需要创建自己的表单,该表单可以在 DataGridView 或类似控件中显示数据并将其显示为模式对话框。
  • 您可以使用 datagridview 设置自定义表单的样式,使其看起来像带有行和列的 MessageBox ;)

标签: c# arrays winforms


【解决方案1】:

你可以试试这个:

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);
}  

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-15
    • 2022-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多