如何将值从一种形式发送到另一种形式
本文关键字:一种 另一种 | 更新日期: 2023-09-27 18:18:32
public string str;
private DataGridViewCell ActiveCell = null;
private void CopyClick(object sender, EventArgs e)
{
if (ActiveCell != null && ActiveCell.Value != null)
str = authLeaveView.Rows[ActiveCell.RowIndex].Cells[0].Value.ToString();
Clipboard.SetText(str);
recLeavePop rlp = new recLeavePop();
rlp.Show();
}
这是我的代码,它工作完美。现在我的问题是,如果我想把the value of "str"
发送到另一种形式,我应该如何实现?
您可以将str
实现为具有私有setter的公共属性。
public string Str { get; private set; }
private DataGridViewCell ActiveCell = null;
private void CopyClick(object sender, EventArgs e)
{
if (ActiveCell != null && ActiveCell.Value != null)
Str = authLeaveView.Rows[ActiveCell.RowIndex].Cells[0].Value.ToString();
Clipboard.SetText(Str);
recLeavePop rlp = new recLeavePop();
rlp.Show();
}
另一种形式,调用YourFormNameWithStrProperty.Str
使用该值
编辑
我在你的评论中看到了这段代码:
在另一种形式中,我使用
Form1 form = new Form1()
,但随后str
给出null。
这是一个明显的行为。就像我在评论中说的,你得到null是因为你在值被设置之前查询了它。当一个新的实例被构造时,一切都是新的和未定义的,包括你的Str属性。
如果您希望每个新的Form1
对象以某种方式照顾来自其他Form1
实例的Str
值,我建议您这样做:
将Form1
的构造函数更改为private,并创建一个返回实例的函数。在函数中,如果我们已经有一个新实例,则将Str
值预先设置为新实例:
private Form1()
{
// do your construction here
Initialize();
}
private Form1(string strValue)
{
// do default construction first
Initialize();
// set the Str value
Str = strValue;
}
public static Form1 GetInstance()
{
return string.IsNullOrEmpty(Str) ? new Form1() : new Form1(Str);
}
然后在你的"另一种形式"中,调用Form1.GetInstance()
来构造对象。
编辑2
不管怎样,前面的方法有一些限制,似乎与你的问题无关。试试下面的方法:
不是在Form1中创建公共属性,而是在需要该值的"the other form"中创建一个公共属性。也就是说,在你的Form1:
private void CopyClick(object sender, EventArgs e)
{
if (ActiveCell != null && ActiveCell.Value != null)
// by the way is this rlp your "The other form"?
recLeavePop rlp = new recLeavePop();
TheOtherForm.Str = authLeaveView.Rows[ActiveCell.RowIndex].Cells[0].Value.ToString();
Clipboard.SetText(TheOtherForm.Str);
rlp.Show();
}
应用范围内变量的概念与类中的相同。
我有一个表单叫做form 1 -
using System;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
lblText.Text = Form2.testVariable;
}
}
}
现在看看我正在接收变量的FORM。夸张地说,它的工作原理,我链接到你- dotnetfiddle.net/YfKNX9
表格2
using System;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form2 : Form
{
public static string testVariable = "potato";
public Form2()
{
InitializeComponent();
}
private void Form2_Load(object sender, EventArgs e)
{
}
}
}
恐怕不能说得更清楚了。 为str变量使用static关键字
public static string str;
在一种形式中赋值,在另一种形式中使用相同的变量。
编辑:-
用MyClass创建一个新类,并在其中创建一个静态变量。
public static class MyClass
{
public static string str;
}
赋值form1为
MyClass.str="Some Value";
以另一种形式使用
MyClass.str
您可以为表单创建第二个构造函数,该构造函数接受字符串参数并将其保存在内部变量
private string Str {get;set;}
public void recLeavePop(string str)
{
Str = str;
}
或声明一个全局静态属性,并在声明
表单之前设置它public static class MyClass
{
public static string Str {get;set;}
}
和你的代码
MyClass.Str = str;
recLeavePop rlp = new recLeavePop();
rlp.Show();
,然后在表单中使用
访问它MyClass.Str;
如果你想传递另一个表单数据,那么添加一个"SetData"方法,并从传递数据的另一个表单调用。
public partial class Form1 : Form
{
Form1Data _data;
public Form1()
{
InitializeComponent();
}
public SetData(Form1Data data)
{
_data = data;
}
}
struct MyData
{
public string Name;
public string Address;
}
我会避免在构造函数中传递数据,因为您可能希望在构造之后设置数据,而且如果您混淆了构造函数,表单设计器可能会变得有点疯狂。