我创建了一个包含公共字段和按钮的表单。该按钮创建另一个表单并将其显示为对话框。我可以访问主表单上的公共字段吗?主窗体中运行的主窗体如下:
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中有很多变量。
答案 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
}
}