c# - 访问其他 Windows 窗体类中的变量

标签 c# windows forms

<分区>

如果有人可以帮助我,我将不胜感激。

我有一个 Windows 窗体应用程序,它具有三种窗体:form1、form2、form3。 form1 在应用程序被激活时启动。在 form1 上,有一个按钮可以调出 form2,并隐藏 form1。还有一个按钮可以调出 form3 并在 form2 上隐藏 form2。

public partial class Form1 : Form
{

    Form2 f2= new Form2();
    public Form1()
    {
        InitializeComponent();
    }
    private void button1_Click(object sender, EventArgs e)
    {
        this.Hide();            
        f2.Show();        
    }
}


public partial class Form2 : Form
{
            Form3 f3 = new Form3();
    private void button1_Click(object sender, EventArgs e)
    {
         this.Hide();
         f3.Show();                
    }
 }

问题出在 form3 上,我试图访问一些在 form2 中运行时赋值的变量。我认为,由于我将 f2 设为无模态形式,我应该能够通过简单地使用 f2.myvariables 进行访问,但是智能感知没有给我 f2 对象。这是为什么?我找到了一种方法来声明这些变量 public static,这样我就可以使用 form2.myvariables 进行访问。这是另一件让我感到困惑的事情。由于所有值都是在运行时分配的,静态变量如何做到这一点?我是 C# 的新手,我已经对此进行了大量搜索,但似乎没有地方能准确回答我的问题。提前感谢您的帮助!!

最佳答案

因此,您在父表单 (form2) 中拥有要在子表单 (form3) 的方法中访问的信息。

  1. form3 中为其需要的信息创建属性。
  2. form2 创建 form3 的实例时,它应该设置这些属性。

您应该认为这不是让子窗体向其父窗体请求信息,而是父窗体正在向其子窗体提供信息。如果你相应地改变你的思维方式,代码不仅会变得更容易编写,而且会更符合良好的编码实践(耦合度更低,不会向外部公开比需要更多的信息等)

要创建属性,您可以在 form3 中执行以下操作:

//TODO: give real name; adjust type as needed
public string SomePropertyName { get; set; }

然后在 form2 中你可以做:

f3.SomePropertyName = "hello from form2";

f3.SomePropertyName = someVariableInForm2;

关于c# - 访问其他 Windows 窗体类中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12042303/

相关文章:

c# - 使用 C# 检测 Windows 操作系统是否具有无效许可证

windows - Windows : Failed to set permissions of path 中的 Nutch

java - 使用纯 C++ 或 Java 设置文件夹权限

php - 表单生成器中的关联数组字段 - Symfony3

c# - 异常抛出 : encapsulate them or not?

c# - 如何从代码启动 Windows Azure 存储模拟器 V3.0

javascript - 使用 Angular JS 隐藏提交表单

php - 我可以通过同一个超链接传递一个值并提交一个表单吗?

c# - 事务超时

c# - 将 javascript 变量分配给 C# 变量 (ASP.net)