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,我同意这不是最好的答案,但这是否值得投反对票?有人能解释一下反对票吗?我很想改进??谢谢。这是最好的方法。在这种情况下,我可以读或写变量。