C# 从打开的表单C传递变量#
我有两张表格,表格一和表格二。Form1有一个变量int x。执行程序时,隐藏Form1,显示Form2;但是,我需要从现有Form1中调用该变量 我知道通过调用Form1的新实例来调用变量的方法C# 从打开的表单C传递变量#,c#,winforms,C#,Winforms,我有两张表格,表格一和表格二。Form1有一个变量int x。执行程序时,隐藏Form1,显示Form2;但是,我需要从现有Form1中调用该变量 我知道通过调用Form1的新实例来调用变量的方法 Form1 r = new Form1(); r.x = 20; 但我想知道如何为一个已经打开的窗体1执行此操作 举几个例子,比如如果有多个变量是由多个表单(Form2、Form3、Form4等)从Form1调用的。表单可以从Form1调用任何变量。此外,表单可以从其他表单调用变
Form1 r = new Form1();
r.x = 20;
但我想知道如何为一个已经打开的窗体1执行此操作
举几个例子,比如如果有多个变量是由多个表单(Form2、Form3、Form4等)从Form1调用的。表单可以从Form1调用任何变量。此外,表单可以从其他表单调用变量(例如,如果Form1和Form2是打开的,那么Form3可以从Form1和Form2调用变量)
我知道这是一个巨大的列表,但如果有人能找到一个好的方法来实现它,我将不胜感激 您必须有一个对“已打开”form1实例的引用,以便您可以引用该表单上的x值 因此,假设Form2实例化了隐藏的form1。您必须在form2中引用form1,才能引用变量 好的,假设这是form2的代码
public partial class Form2 : Form
{
private Form1 f;
public Form2()
{
InitializeComponent();
}
private void Form2_Load(object sender, EventArgs e)
{
f = new Form1
{
Visible = false
};
int x = f.X;
}
}
然后为form1编码
public partial class Form1 : Form
{
public int X { get; set; }
public Form1()
{
InitializeComponent();
X = 20;
}
}
您需要确保从program类获取的表单是
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form2());
}
}
静态类程序
{
///
///应用程序的主要入口点。
///
[状态线程]
静态void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(新Form2());
}
}
您必须有一个对“已打开”form1实例的引用,以便您可以引用该表单上的x值
因此,假设Form2实例化了隐藏的form1。您必须在form2中引用form1,才能引用变量
好的,假设这是form2的代码
public partial class Form2 : Form
{
private Form1 f;
public Form2()
{
InitializeComponent();
}
private void Form2_Load(object sender, EventArgs e)
{
f = new Form1
{
Visible = false
};
int x = f.X;
}
}
然后为form1编码
public partial class Form1 : Form
{
public int X { get; set; }
public Form1()
{
InitializeComponent();
X = 20;
}
}
您需要确保从program类获取的表单是
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form2());
}
}
静态类程序
{
///
///应用程序的主要入口点。
///
[状态线程]
静态void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(新Form2());
}
}
在表单本身上创建公共属性。让get访问器返回表单值。你可以这样称呼它<代码>Form1.MyProperty代码>
public string MyPrperty {
get {
return Form1.txtExample.text;
}
}
编辑:
如果一次要返回的值很多,那么可以返回所有这些值的字典。我会认真考虑重新思考你的形式,如果你有20-40的价值被填补。对我来说,这听起来像是一个糟糕的用户体验 在表单本身上创建公共属性。让get访问器返回表单值。你可以这样称呼它<代码>Form1.MyProperty代码>
public string MyPrperty {
get {
return Form1.txtExample.text;
}
}
编辑:
如果一次要返回的值很多,那么可以返回所有这些值的字典。我会认真考虑重新思考你的形式,如果你有20-40的价值被填补。对我来说,这听起来像是一个糟糕的用户体验 打开或关闭哪个表单并不重要。您的最终目标是访问Form2中Form1的成员,不是吗?如果在创建Form2实例时出现这种情况,请按如下方式执行
Form1 objForm1 = new Form1();
Form2 obj = new Form2(objForm1);
class Form2: Form
{
private Form1 form1Object;
public Form2(Form1 obj)
{
form1Object = obj;
}
private void SomeMethodInForm2()
{
//Here you can access the variable in form1 like
form1Object.PropertyNameYouWantToAccess;
}
}
class Form1: Form
{
public int PropertyNameYouWantToAccess{get;}
}
所以在中二课堂上看起来是这样的
Form1 objForm1 = new Form1();
Form2 obj = new Form2(objForm1);
class Form2: Form
{
private Form1 form1Object;
public Form2(Form1 obj)
{
form1Object = obj;
}
private void SomeMethodInForm2()
{
//Here you can access the variable in form1 like
form1Object.PropertyNameYouWantToAccess;
}
}
class Form1: Form
{
public int PropertyNameYouWantToAccess{get;}
}
表单1类可以如下所示
Form1 objForm1 = new Form1();
Form2 obj = new Form2(objForm1);
class Form2: Form
{
private Form1 form1Object;
public Form2(Form1 obj)
{
form1Object = obj;
}
private void SomeMethodInForm2()
{
//Here you can access the variable in form1 like
form1Object.PropertyNameYouWantToAccess;
}
}
class Form1: Form
{
public int PropertyNameYouWantToAccess{get;}
}
打开或关闭哪个表单并不重要。您的最终目标是访问Form2中Form1的成员,不是吗?如果在创建Form2实例时出现这种情况,请按如下方式执行
Form1 objForm1 = new Form1();
Form2 obj = new Form2(objForm1);
class Form2: Form
{
private Form1 form1Object;
public Form2(Form1 obj)
{
form1Object = obj;
}
private void SomeMethodInForm2()
{
//Here you can access the variable in form1 like
form1Object.PropertyNameYouWantToAccess;
}
}
class Form1: Form
{
public int PropertyNameYouWantToAccess{get;}
}
所以在中二课堂上看起来是这样的
Form1 objForm1 = new Form1();
Form2 obj = new Form2(objForm1);
class Form2: Form
{
private Form1 form1Object;
public Form2(Form1 obj)
{
form1Object = obj;
}
private void SomeMethodInForm2()
{
//Here you can access the variable in form1 like
form1Object.PropertyNameYouWantToAccess;
}
}
class Form1: Form
{
public int PropertyNameYouWantToAccess{get;}
}
表单1类可以如下所示
Form1 objForm1 = new Form1();
Form2 obj = new Form2(objForm1);
class Form2: Form
{
private Form1 form1Object;
public Form2(Form1 obj)
{
form1Object = obj;
}
private void SomeMethodInForm2()
{
//Here you can access the variable in form1 like
form1Object.PropertyNameYouWantToAccess;
}
}
class Form1: Form
{
public int PropertyNameYouWantToAccess{get;}
}
我认为有一个原因是您不愿意尝试
System.Properties.Settings.Default
可从visual studio中的项目菜单-->属性访问
谢谢…我想这是你不愿意尝试
System.Properties.Settings.Default
可从visual studio中的项目菜单-->属性访问
谢谢…我猜您正在寻找一个数组中包含所有打开表单的属性 您需要做的是检查每个表单的类型,以及它是否等同于
Form1
访问变量的值。此外,要访问表单外部的变量,需要将其访问修饰符设置为Public
,或为其创建相应的属性
编辑
下面是一个示例代码:(未测试)
编辑
或者您可以使用构造函数重载来完成此任务:
public partial class Form1 : Form
{
public int X;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
X = 100;
Form2 frm = new Form2(x); // pass variable to form2, if multiple values pass int array
frm.Show();
this.Hide();
}
}
public partial class Form2 : Form
{
int local_X = 0;
public Form2()
{
InitializeComponent();
}
// Overloading of constructor
public Form2(int X) // if multiple values pass int array
{
InitializeComponent();
local_X = x; // capture value from constructor in class variable.
}
private void Form2_Load(object sender, EventArgs e)
{
// no need to iterate here for now due to overloading value get passed during initialization.
}
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show("Value of X is : " + local_X); // display value if alert box.
}
}
我的猜测是,您正在寻找包含数组中所有打开形式的属性 您需要做的是检查每个表单的类型,以及它是否等同于
Form1
访问变量的值。此外,要访问表单外部的变量,需要将其访问修饰符设置为Public
,或为其创建相应的属性
编辑
下面是一个示例代码:(未测试)
编辑
或者您可以使用构造函数重载来完成此任务:
public partial class Form1 : Form
{
public int X;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
X = 100;
Form2 frm = new Form2(x); // pass variable to form2, if multiple values pass int array
frm.Show();
this.Hide();
}
}
public partial class Form2 : Form
{
int local_X = 0;
public Form2()
{
InitializeComponent();
}
// Overloading of constructor
public Form2(int X) // if multiple values pass int array
{
InitializeComponent();
local_X = x; // capture value from constructor in class variable.
}
private void Form2_Load(object sender, EventArgs e)
{
// no need to iterate here for now due to overloading value get passed during initialization.
}
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show("Value of X is : " + local_X); // display value if alert box.
}
}
你可以用以下方法来做 在我的例子中,form1是form4,form2是form5。请考虑:()
form1
的实例将是static
,这样您就可以在form2
上使用该实例来引用form1的
属性我希望它能帮助你。:) 您可以通过以下方式进行操作 在我的例子中,form1是form4,form2是form5。请考虑:()
form1
的实例将是static
,这样您就可以在form2
上使用该实例来引用form1的
属性<