从另一个表单访问表单中的内容的最佳方法是什么? C#

时间:2012-12-04 12:41:23

标签: c# forms

我只是想知道。如果我有两个表单..表单1和表单2,您需要访问文本框,标签等...例如,使其可见或更改其文本..

从Form2访问这些内容的最佳方法是什么?

在表单1中创建方法,如:

public void setTextBoxVisible(){
     textBox1.Visible = true;
}

或在表单1中创建一个访问者,并从表单2更改可见性,如:

表格2:

public TextBox TextBox1 {
    get { return textBox1; }
}

表格1:

Form1 form1 = new Form1();
form1.TextBox1.Visible = true;

我知道这可能是一个愚蠢的问题,但我仍然是编程的新手,我希望知道我能做这些事情的最好方法。谢谢:))

5 个答案:

答案 0 :(得分:2)

在您的第二个场景中,您声明了只读属性,而在First方法中,您通过public函数公开了该功能,IMO更清晰,更好的方法。

编辑: 我在您的第一种方法中看到的问题之一是您无法阻止用户更改除Visible之外的某些属性。用户(开发人员)也可能错误地设置TextBox的Text属性。例如

form1.TextBox1.Text = "Some new text";

以上不是理想的行为。 (您只想设置Visible属性)

答案 1 :(得分:2)

程序员偏好我认为..我总是更喜欢方法1因为错误的空间较小,如果你想在很多实例中改变它的作用,那么它在一行代码中完成

答案 2 :(得分:2)

选项1肯定更好,因为您只展示了要公开的部分 您不仅会在调用者的一部分上留下较少的错误空间,而且还表明了您的方法的意图。

在选项2中,控件的所有方面都是可访问的,可以从外部代码更改,而不仅仅是Visible属性。

如果更符合您的偏好,您可以创建一个属性:

public bool TextBox1Visible
{
    get { return TextBox1.Visible; }
    set { TextBox1.Visible = value; }
}

答案 3 :(得分:0)

将数据模型用作单独的类。使用observer / MVVM模式在数据模型更改时收到通知。

答案 4 :(得分:0)

我假设你在Form2中有一些动作触发了对Form 1的更改。鉴于你的选择我会得到1.另一种选择是考虑事件。 Form1订阅Form2上的事件。当它被触发时,您可以将任何您想要的内容传递给Form1,并让它执行您想要的任何更新或更改。