在C#中两个实例化的WinForms之间传递数据
我有一个主表单,它可以显示计算并打开和关闭用户创建的项目。
当用户单击File下的Open Project按钮时,会打开一个名为Open Project的表单,如下所示,允许用户加载项目:
现在,我想在单击“确定”后将此表单中的数据传递到主表单中。
我遇到的问题是主表格已经打开。
任何解决这个问题的方法都会受到高度赞赏。
尝试在Open Project Form
创建Properties
主要表格
private void openButton_Click(object sender, EventArgs e) { using(var f = new Open_Project_Form()) { f.ProjectReference = projectRefrencetTextBox.Text; f.ProjectNo = projectNoTextBox.Text; f.ShowDialog(); } }
打开项目表格
public string ProjectReference { get; set; } public string ProjectNo { get; set; } private void Open_Project_Form_Load(object sender, EventArgs e) { projectRefrenceComboBox.Text = ProjectReference; projectNoTextBox.Text = ProjectReference; }
UPDATE
我误解了这个问题。 我以前的答案是从MainForm
到OpenProjectForm
这次是从OpenProjectForm
到MainForm
主要表格
//Properties for MainForm public string ProjectReference { get; set; } public string ProjectNo { get; set; } private void openButton_Click(object sender, EventArgs e) { using(var f = new Open_Project_Form() { Owner = this }) { f.ShowDialog(); if (f.DialogResult == DialogResult.OK) { projectRefrencetTextBox.Text = ProjectReference; projectNoTextBox.Text = ProjectNo; } } }
打开项目表单:请注意您有一个okButton
和cancelButton
private void Open_Project_Form_Load(object sender, EventArgs e) { okButton.DialogResult = DialogResult.OK; this.AcceptButton = okButton; this.CancelButton = cancelButton; }
现在,在okButton_Click event
private void okButton_Click(object sender, EventArgs e) { var f = Owner as MainForm; if (f == null) return; f.ProjectReference = projectRefrenceComboBox.Text; f.ProjectNo = projectNoTextBox.Text; Close(); }
参考:
- 的AcceptButton
- CancelButton
- Button.DialogResult
希望它能帮到你。
你能用事件吗? 创建一个EventClass并将值作为事件的结果返回。
在打开的表单类中创建一个事件:
public event EventHandler ProjectDetailsSubmitted; public class ProjectDetails: EventArgs { public string projectReference{ get; set; } public string projectNo{get;set;} //you can add more prop.s here } On your Ok button click event add if (ProjectDetailsSubmitted != null) { ProjectDetailsArgs argss = new ProjectDetailsArgs(); argss.projectReference = projectRefrencetTextBox.Text; argss.projectNo = projectNoTextBox.Text; ProjectDetailsSubmitted(null, argss); }
在您的主窗体中为它创建一个处理程序:
childform.ProjectDetailsSubmitted+=new EventHandlerproject_detailsSubmitted); public void project_detailsSubmitted(object sender, ProjectDetailsArgs e) { //Do Your work }