如何在 C# 中的 TableLayoutPanel 中显示字典的内容?

How to display the content of a dictionary in a TableLayoutPanel in C#?

我需要在名为 ucOutputPredictionsResults 的 TableLayoutPanel 中显示名为 predictionDictionary 的字典的内容,并在第一列中显示名称,在第二列中显示值。在我的字典中,所有键和值的类型都是字符串。

我可以显示键和值,但不是我要求的顺序

这是我所做的:

this.ucOutputPredictionsResults.RowCount = 0;
this.ucOutputPredictionsResults.ColumnCount = 0;

foreach (KeyValuePair<string, string> kvp in (_testExecution as TestExecutionAlveoGraph)
                                             .predictionDictionary)
{
   Label lb = new Label();
   lb.Text = kvp.Key;

   this.ucOutputPredictionsResults.Controls.Add(lb,
             this.ucOutputPredictionsResults.ColumnCount,
             this.ucOutputPredictionsResults.RowCount);

   Label valueLbl = new Label();
   valueLbl.Text = kvp.Value;

   this.ucOutputPredictionsResults.Controls.Add(valueLbl,
            this.ucOutputPredictionsResults.ColumnCount +1, 
            this.ucOutputPredictionsResults.RowCount);
}

但结果不是我所期望的:

虽然我同意 TaW 的观点,即您应该显式设置 TableLayoutPanel 并以更受控的方式添加控件,但您可以通过将 ColumnCount 设置为 2 并使用接收到的 Add() 的重载来修复 "problem"只有一个控件。然后将按预期添加标签。

简化代码:

private void button1_Click(object sender, EventArgs e)
{
    this.ucOutputPredictionsResults.Controls.Clear();
    this.ucOutputPredictionsResults.RowCount = 0;
    this.ucOutputPredictionsResults.ColumnCount = 2;

    foreach (KeyValuePair<string, string> kvp in _testExecution)
    {
        Label lb = new Label();
        lb.Text = kvp.Key;

        this.ucOutputPredictionsResults.Controls.Add(lb);

        Label valueLbl = new Label();
        valueLbl.Text = kvp.Value;

        this.ucOutputPredictionsResults.Controls.Add(valueLbl);
    }
}