在c#中从一个表单发送参数到另一个表单
本文关键字:表单 参数 另一个 一个 | 更新日期: 2023-09-27 18:11:11
我有两种形式(c#)。在一个表单中,有一种方法可以在关闭我想要在另一个表单(主表单)上更新数据的表单后获取数据并将其存储在数据库中。如何使用OOP或简单地做得最漂亮和好。
一般来说,当你想让主表单更新时,你可以在那个表单上创建一个公共方法,当它有新的数据并可以将它们发送到主表单时,从另一个表单调用它。这应该不成问题。
注意,如果你想发送数据到某个地方,你需要一个对那个地方的引用,也就是说,你需要一个对另一个表单中的主表单的引用。要么将this
从主表单传递到另一个表单的构造函数,或者您也可以将引用存储在Program
类的静态字段中(在Main
方法中创建主表单)等。
对oop最友好的解决方案可能是在任何表单上"触发"数据更新,该事件由另一个表单的方法订阅和处理。下面是一个基本的连接:
public class Form1:Form
{
public event EventHandler<MyDataObject> DataChanged;
...
public override void OnClosing(CancelEventArgs e)
{
//Put in logic to determine whether we should fire the DataChanged event
try
{
if(DataChanged != null) DataChanged(this, myFormCurrentData);
base.OnClosing(e);
}
catch(Exception ex)
{
//If any handlers failed, cancel closing the window until the errors
//are resolved.
MessageBox.Show(ex.Message, "Error While Saving", MessageBoxButtons.OK);
e.Cancel = true;
}
}
}
...
public class Form2:Form
{
//Called from wherever you would open Form1 from Form2
public void LaunchForm1()
{
var form1 = new Form1();
form1.DataChanged += HandleDataChange;
form1.Show();
}
private void HandleDataChange(object sender, MyDataObject dataObj)
{
//Do your data validation or persistence in this method; if it fails,
//throw a descriptive exception, which will prevent Form1 from closing.
}
}
你不必使用事件;也可以使用一个简单的委托,它可以做几乎相同的事情,同时也可以在表单的构造函数中指定(因此需要提供处理程序)。
您可以这样做,以便从一个表单更新另一个表单的值…
表2代码
public event EventHandler<UpdatedEventArgs> updateEvent;
public class UpdatedEventArgs : EventArgs
{
public string SomeVal { get; set; } // create custom event arg for your need
}
protected virtual void OnFirstUpdateEvent(UpdatedEventArgs e)
{
if (updateEvent != null)
updateEvent(this, e);
}
private void button1_Click(object sender, EventArgs e)
{
UpdatedEventArgs eventData = new UpdatedEventArgs();
eventData.SomeVal = "test"; // set update event arguments, according to your need
OnFirstUpdateEvent(eventData);
}
public Form2()
{
InitializeComponent();
}
表格1代码
public Form1()
{
InitializeComponent();
Form2 form2 = new Form2();
form2.updateEvent += new EventHandler<Form2.UpdatedEventArgs>(form2_updateEvent); // create event handler to update form 1 from form 2
form2.Show();
}
void form2_updateEvent(object sender, Form2.UpdatedEventArgs e)
{
if (e != null && e.SomeVal != null)
{
// Do the update on Form 1
// depend on your event arguments update the grid
//MessageBox.Show(e.SomeVal);
}
}