Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在另一个窗体中使用运行窗体的字段_C# - Fatal编程技术网

C# 在另一个窗体中使用运行窗体的字段

C# 在另一个窗体中使用运行窗体的字段,c#,C#,我创建了一个包含公共字段和按钮的表单。该按钮创建另一个窗体并将其显示为对话框。我可以访问主窗体上的公共字段吗?主窗体在主方法中运行,如下所示: static class Program { [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderi

我创建了一个包含公共字段和按钮的表单。该按钮创建另一个窗体并将其显示为对话框。我可以访问主窗体上的公共字段吗?主窗体在主方法中运行,如下所示:

static class Program
    {
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new MainForm());
        }
    }

public partial class MainForm : Form
    {
        public int number;

        public MainForm()
        {
            InitializeComponent();
        }

        private void button_Click(object sender, EventArgs e)
        {
            (new SecondForm()).ShowDialog();
        }
    }

public partial class SecondForm : Form
    {
        public SecondForm()
        {
            InitializeComponent();
        }
        void Method()
        {
            //How can I access to number?
        }
    }

我不想使用构造函数,因为mainform中有很多变量。

创建
mainform
类的对象,您可以使用它访问类中的所有公共变量

MainForm f = new MainForm();
int a = f.number;
这可能不会真正起作用,因为它将创建
MainForm
类的新实例,并且您可能无法获得所需的结果,因此最好将
number
设置为静态

public static int number;
然后你可以用

int a = MainForm.number;
当然,只要做:

var form = new SecondForm();

form.<property> = <value>
// ...

DialogResult result = form.ShowDialog(); 

if (result == DialogResult.OK)
{
    // ...
var form=new SecondForm();
表格
// ...
DialogResult=form.ShowDialog();
if(result==DialogResult.OK)
{
// ...

您说过不想使用SecondForm构造函数从MainForm传递所有这些变量。为什么不创建一个类来保存这些值并在两者之间传递类实例呢

public class FormData
{
    public int number;
    public int anotherInt;
    public FormData(int num)
    {
        number = num;
    }
}



public class SecondForm : Form
{
    private FormData myData;
    public SecondForm(FormData data)
    {
        myData = data;
    }
}



public void AMethodInMainForm()
{
    FormData d = new FormData(this.number);
    d.anotherInt = 26;
    SecondForm frm = new SecondForm(d);
}

在SecondForm中定义公共编号

public int number;
在显示第二个表单之前,请尝试以下操作:

SecondForm f2 = new SecondForm();
f2.number = this.number;
f2.ShowDialog();
然后,您可以在第二个表单中访问您的号码。如果您在表单2中的方法中多次调用number变量,这会起作用。但是,如果您希望随时在表单1中访问号码,则应将其定义为
静态
公共

,您可以使用设置所创建表单所有者的方法

secondForm.ShowDialog(this);
第二种形式的用法:

var temp = ((MainForm)this.Owner).number;

将您的号码声明为公共静态整数,然后:

public partial class SecondForm : Form
{
    public SecondForm()
    {
        InitializeComponent();
    }
    void Method()
    {
        MainForm.number = // something
    }
}

这将与创建第二个表单的实例完全不同。@MarkHall谢谢updated@Downvoter,我同意这不是最好的答案,但这是否值得投反对票?有人能解释一下反对票吗?我很想改进??谢谢。这是最好的方法。在这种情况下,我可以读或写变量。