C# 初始化标签数组"无法将'字符串'隐式转换为'System.Windows.Forms.Label'



我有一个成员变量声明如下:

private Label[] dice = new Label[numberOfDice];

当我尝试在表单上使用标签初始化dice中的值时,我在此行中收到错误"无法将'字符串'隐式转换为'系统.Windows.Forms.Label'":

dice[i] = dieName;

我知道dieName是一个字符串,但dice数组希望我在表单中为其提供实际标签的名称。在我的表单中,我有五个标签,分别名为die1,die2,...,die5。

这是我初始化dice数组的函数:

private void InitializeLabels()
{
   for (int i = 0; i < numberOfDice; i++)
   {
       string dieName = String.Format("die{0}", i + 1);
       dice[i] = dieName;
   }
}

我知道我可以这样做:

dice[0] = die1;
dice[1] = die2;
...
dice[4] = die5;

但我想使用一种更干净的方法,如上面的 for 循环。

从错误消息中可以清楚地看出,您正在将字符串类型值( dieName ) 分配给类型为 Label 的变量,因此您遇到了此类错误。我认为您正在尝试设置标签文本的值,如果是这样,您应该使用标签控件的 .Text 属性。如果要为 Label 命名,则意味着您应该使用 .Name 属性,现在您可以查看代码段以实现目标。

for (int i = 0; i < numberOfDice; i++)
{
    string dieName = String.Format("die{0}", i + 1);
    dice[i].Text = dieName;
    dice[i].Name = dieName;
}

试试这个:

private void InitializeLabels()
{
   for (int i = 0; i < numberOfDice; i++)
   {
       string dieName = String.Format("die{0}", i + 1);
       dice[i].Text = dieName;
   }
}

或者如果它们未初始化

private void InitializeLabels()
{
   for (int i = 0; i < numberOfDice; i++)
   {
       string dieName = String.Format("die{0}", i + 1);
       dice[i].Text = new Label{Parent = this, 
                                Text = dieName, 
                                Size = new Size(50,20), 
                                Location = new Point(i * 50, 0)};
   }
}

最新更新