【问题标题】:How to make a variable that will work on multiple forms? [closed]如何制作适用于多种形式的变量? [关闭]
【发布时间】:2014-06-21 01:44:36
【问题描述】:

现在我有 2 个表格。我想制作一个将在两种形式之间传递的变量(如 int)。例如,我用代码在第一个表单上创建了一个变量:public static int myInt = 50; 但是如何将该变量转换为表格 2?

【问题讨论】:

标签: c# .net winforms variables


【解决方案1】:

不要创建任何这样的静态或公共变量...您应该以第二种形式创建一个可以从第一种形式访问的属性。尽管您可以直接以第二种形式传输您的值,而无需声明任何静态变量。

//Form2

private string value1 = string.Empty;
public string Value1
{
   get { return value1; }
   set { value1 = value; }
}


//Form1

private void YourMethod()
{
    Form2 frm = new Form2();
    frm.Value1 = "This is a sample value to pass in form 2";
    frm.Show();

}

现在,您可以使用 Value 属性在 Form2 中获取值。

//Form2
private void Form2_Load(object sender, EventArgs e)
{
     string myValue = Value1; //here you can use value like that
}

【讨论】:

  • 使用静态变量有什么问题?它似乎更具可读性和更容易。
【解决方案2】:

在你的第一个表单中你应该有(假设你正在使用设计器)

//Form1.cs
namespace myProject
{
    public partial class Form1 : Form
    {
        public static int myInt = 50;
        public Form1()
        {
            InitializeComponent();
        }
    }
}

要以第二种形式访问,假设它们在同一个命名空间中,请使用:

//Form2.cs
namespace myProject
{
    public partial class Form2 : Form
    {
        int thisInt;
        public Form2()
        {
            InitializeComponent();
            thisInt = Form1.myInt;
        }
    }

【讨论】:

  • 我是 C# 的新手。如何让它们进入同一个命名空间?
  • 它们应该自动在同一个命名空间中。当您创建项目时,命名空间与项目具有相同的名称,并且通常将每个表单都放入其中(测试只是为了确保对我来说可以正常工作)
  • 好的,所以我刚刚尝试了代码,它在表单 2 上给了我一个错误。它说“表单 1 不包含 myInt 的定义”
  • 原来我把代码放错地方了!现在工作!非常感谢!
【解决方案3】:

您可以更改表单 2 的构造函数以接受变量并从表单 1 传递它。

public Form2(int passed)

如果你想通过引用传递它。

public Form2(ref int passed)

通过引用打开带有变量的表格 2。

int passed = 1;
new Form2(ref passed);

如果通过引用传递,如果值在表单 2 中发生更改,该更改也将显示在表单 1 中,因为“是相同的”变量(内存中的值相同)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多