【问题标题】:Changing control properties from another form [duplicate]从另一种形式更改控件属性[重复]
【发布时间】:2023-03-06 23:43:01
【问题描述】:

我正在尝试此代码以另一种形式影响所有文本框

//From form2
Principal FrmPrincipal = new Principal();
private void button1_Click(object sender, EventArgs e)
{
    foreach (var control in FrmPrincipal.Controls)
    {
        if (control is TextBox)
        {
            ((TextBox)control).Enabled = true;
            ((TextBox)control).Text = String.Empty;
        }
    }
}

但它不起作用,我还需要做什么。谢谢。

@DJ KRAZE 在打开 form2 之前,此代码禁用了我的 Principal 表单的所有文本框,它确实有效

    foreach(var control in this.Controls)
    {
        if (control is TextBox)
        {
            ((TextBox)control).Enabled = false;
        }
    }

【问题讨论】:

  • 什么是Principal
  • 默认情况下不是控件设置为私有..?手动将控件更改为公开,然后尝试..
  • Principal 是我要更改的文本框所在的第一个表单的名称,这段代码在 form2 中
  • 你能定义“不工作”吗?我猜它正在设置属性,但在您刚刚创建的表单上并没有做任何事情。
  • 看看这个解决方案:stackoverflow.com/a/10704066/952310

标签: c# winforms


【解决方案1】:

您正在从Principal 调用form2,并且您想通过单击form2 的按钮来Disable 的所有TextBoxesPrincipal

要执行此操作,您必须在 Constructor 中将 Principal 引用传递给 form2

示例(从Principal 表单调用form2):

Form2 form2 = new Form2(this);  //passing "Principal" form reference to "form2"
form2.Show();

您必须在form2 中进行的更改:

Principal FrmPrincipal;             //new object
Form2(Principal principalRef)       //"form2" constructor
{
    FrmPrincipal = principalRef;    //assignment of "Principal" form reference to the new object
}

现在您可以在form2 的任意位置调用FrmPrincipal 并进行任何您想要的更改。

【讨论】:

  • 感谢您的回答,它在 FrmPrincipal 中显示 nullReferenceException。无论如何,我将不得不寻找解决我的问题的方法。
  • @IsaacTuncarCedron 它通过异常在哪里?
猜你喜欢
  • 1970-01-01
  • 2013-03-20
  • 1970-01-01
  • 2010-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-06
相关资源
最近更新 更多