我有一个带有 LayoutPanel
的表单,其中动态添加了 buttons
。 buttons
是在运行时添加的,这是有效的,但我的问题是我想将属性设置为 buttons
之一,如果 textBox
为空,当 textBox
不为空时启用它。
这是一个代码示例,我收到的错误如下:
private void Form1_Load(object sender, EventArgs e)
{
// Create 3 buttons
Button button1 = new Button();
button1.Name = "button1";
tableLayoutPanel1.Controls.Add(button1, 0, 0);
Button button2 = new Button();
button1.Name = "button2";
tableLayoutPanel1.Controls.Add(button2, 0, 0);
Button button3 = new Button();
button3.Name = "button1";
tableLayoutPanel1.Controls.Add(button3, 0, 0);
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(textBox1.Text))
{
button1.Enabled = false;
}
else
{
button1.Enabled = true;
}
}
CS0103 The name 'button1' does not exist in the current context
我应该在其他地方声明按钮,以便整个代码可以看到它们确实存在,还是我的问题在其他地方?谢谢。
最佳答案
如果您想直接从其他方法访问具有名称的按钮,则必须在 Form1_Load
之外声明一个按钮,因为在您的情况下,按钮仅在 Form1_Load
中可用方法:
Button button1;
private void Form1_Load(object sender, EventArgs e)
{
// Create 3 buttons
button1 = new Button();
button1.Name = "button1";
tableLayoutPanel1.Controls.Add(button1, 0, 0);
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
button1.Enabled = !string.IsNullOrEmpty(textBox1.Text);
}
或者如果您想在 Form1_Load
中声明按钮,您可以像这样访问按钮:
private void textBox1_TextChanged(object sender, EventArgs e)
{
var btn = tableLayoutPanel1.Controls.OfType<Button>().Where(x => x.Name == "button1").FirstOrDefault();
(btn as Button).Enabled = !string.IsNullOrEmpty(textBox1.Text);
}
关于c# - 更改动态创建的控件的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37335127/