C#初始化一系列标签"无法隐式转换' string'到了System.Windows.Forms.Label'

时间:2016-05-31 02:58:01

标签: c# arrays visual-studio windows-forms-designer labels

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

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

当我尝试使用表单上的标签初始化dice中的值时,我会收到错误"无法隐式转换' string'到' System.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循环。

2 个答案:

答案 0 :(得分:1)

从错误消息中可以清楚地看到,您正在为类型为dieName的变量分配字符串类型值(Label),因此您遇到了此类错误。我认为您正在尝试设置标签文本的值,如果是这样,您应该使用Label Control的.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;
}

答案 1 :(得分:0)

试试这个:

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