c# - 更改动态创建的控件的属性

标签 c# controls

我有一个带有 LayoutPanel 的表单,其中动态添加了 buttonsbuttons 是在运行时添加的,这是有效的,但我的问题是我想将属性设置为 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/

相关文章:

c# - 如何启动异步任务对象

c# - 如何防止 C# 中窗体的 keydown 事件多次触发?

c# - Entity Framework 计算属性问题

ruby-on-rails - Ruby on Rails 虚拟主机控制面板/服务器管理

Wpf 模板库

vb.net - Visual Studio 自定义控件错误的 AddHandler

c# - AsParallel - Linq Where 子句性能之前与之后

c# - 如何使用 .NET P/调用 CryptUIWizExport 函数

Java Applet 导致 .NET Webbrowsercontrol 崩溃

delphi - FMX : Handle of controls