提问者:小点点

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


我需要在名为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);
}

但结果并不是我预想的那样:


共1个答案

匿名用户

虽然我同意TaW的观点,即您应该显式地设置TableLayoutPanel并以更受控制的方式添加控件,但是您可以通过将ColumnCount设置为2并使用仅接收控件的add()重载来修复“问题”。 标签将按预期添加到那时。

简化代码:

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