使用字符串通过文本框更改窗体的背景颜色

时间:2016-11-02 17:15:05

标签: c# winforms

我正在使用以下代码,以便使用TextBox从用户获取Form的背景颜色,如果颜色与C#颜色匹配,则将Form背景颜色更改为用户输入的颜色,否则显示一条消息,颜色不存在。

问题是没有办法从包含颜色名称的字符串中读取颜色。所以我无法使用

Form1.ActiveForm.BackColor = Color.text

我该怎么做才能解决这个问题?

private void button1_Click(object sender, EventArgs e)
{
  string text = textBox1.Text;
  string[] colors = Enum.GetNames(typeof(System.Drawing.KnownColor));
  for (int i = 0; i < colors.Length; i++)
  {
    if (colors[i] == text)
    {
      // Form1.ActiveForm.BackColor = Color.
      MessageBox.Show("BackGround Color of Form Has Been Changed");
    }
    else
    {
      MessageBox.Show("Color You Entered Does Not Exist");
    }
  }
}

1 个答案:

答案 0 :(得分:3)

您可以使用此类代码:

this.BackColor = (Color)new ColorConverter().ConvertFromString(textbox1.Text);

但优于TextBox的是包含颜色的ComboBox。您可以使用ComboBox或任何其他颜色名称列表填充KnowsColor

comboBox1.DataSource = Enum.GetValues(typeof(KnownColor)).Cast<KnownColor>().ToList();

然后,当您想从ComboBox获取所选颜色时:

if(comboBox1.SelectedIndex>=0)
    this.BackColor = Color.FromKnownColor((KnownColor)comboBox1.SelectedValue);