以另一种形式使用运行形式的字段

时间:2013-12-23 15:52:29

标签: c#

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

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中有很多变量。

6 个答案:

答案 0 :(得分:2)

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

secondForm.ShowDialog(this);

以第二种形式使用:

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

答案 1 :(得分:0)

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

MainForm f = new MainForm();
int a = f.number;

这可能不会真正起作用,因为它会创建MainForm类的新实例,并且您可能无法获得所需的结果,因此最好将number设为静态。

public static int number;

然后你可以使用

int a = MainForm.number;

答案 2 :(得分:0)

当然,只需:

var form = new SecondForm();

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

DialogResult result = form.ShowDialog(); 

if (result == DialogResult.OK)
{
    // ...

答案 3 :(得分:0)

你说你不想使用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);
}

答案 4 :(得分:0)

在SecondForm中定义公共号码

public int number;

然后在你展示SecondForm之前试试这个:

SecondForm f2 = new SecondForm();
f2.number = this.number;
f2.ShowDialog();

然后你可以在你的SecondForm里面访问你的号码。如果你从你的form2里面的方法中多次调用数字变量,这是有效的。但是如果你想在Form1中想要访问号码,你应该将它定义为{{ 1}}和Static

答案 5 :(得分:0)

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

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