【问题标题】:Passing data between two instantiated WinForms in C# [duplicate]在 C# 中的两个实例化 WinForm 之间传递数据 [重复]
【发布时间】:2013-01-25 03:13:21
【问题描述】:

我有一个主窗体,用于计算并打开和关闭用户创建的项目。

当用户点击 File 下的 Open Project 按钮时,会打开一个名为 Open Project 的表单,如下所示,允许用户加载项目:

现在,我想在单击“确定”后将此表单中的数据传递到主表单中。

我遇到的问题是主窗体已经打开。

对此问题的任何解决方案将不胜感激。

【问题讨论】:

  • 不确定您认为主窗体已经打开是一个问题。为什么你不能简单地让主窗体从其他窗体中获取你想要的任何信息?听起来您需要其他表单类中的属性。

标签: c# .net winforms


【解决方案1】:

尝试在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;
}

更新

我误解了这个问题。我之前的回答是从MainFormOpenProjectForm这次是从OpenProjectFormMainForm

主窗体

//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;
        }
    }
}

打开项目表单:注意您有一个okButtoncancelButton

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();
}

参考:

希望对你有帮助。

【讨论】:

  • 我刚刚对此进行了测试,效果很好!非常感谢您的帮助。
  • 不客气,但不要忘记我的回答,将其标记为已接受 :)
【解决方案2】:

你可以使用事件吗?创建一个 EventClass 并将值作为事件的结果返回。

【讨论】:

    【解决方案3】:

    在打开的表单类中创建一个事件:

    public event EventHandler<ProjectDetailsArgs> 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 EventHandler<ProjectDetailsArgs>project_detailsSubmitted);
    
                    public void project_detailsSubmitted(object sender, ProjectDetailsArgs e)
                    {
             //Do Your work
                    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-05
      • 2021-08-17
      • 1970-01-01
      • 2015-09-13
      • 2014-02-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多