c# - 将数据从子窗体发送到父窗体 TextBox

标签 c# winforms .net-3.5

我有一个包含名字、姓氏等的“HUD”的父表单。其中一个子表单是搜索表单。当用户从 DataGrid 中显示的结果中选择一个成员时,我希望相关信息填充到 HUD 中。我创建了一个 HUD 类,其中包含每个值的变量和一个名为 UpdateHUD() 的方法。我不确定如何让它工作。我引用了包含 HUD 的父表单的搜索表单,如下所示:

public frmWWCModuleHost _frmWWCModuleHost;

这是我用来嵌入表单的代码。我没有使用 MDI。

 public static void ShowFormInContainerControl(Control ctl, Form frm)
    {
        frm.TopLevel = false;
        frm.FormBorderStyle = FormBorderStyle.None;
        frm.Dock = DockStyle.Fill;
        frm.Visible = true;
        ctl.Controls.Add(frm);
    }

这是我在 Cell 上运行的代码 点击搜索表单。这是我尝试实现 HUD 类之前的内容。

private void dgvSearchResults_CellContentClick(object sender, DataGridViewCellEventArgs e)
    {
        _frmWWCModuleHost = new frmWWCModuleHost();
        _frmWWCModuleHost.tbxHUD_LastName.Text = dgvSearchResults.CurrentRow.Cells[1].FormattedValue.ToString();
        _frmWWCModuleHost.tbxHUD_LastName.Invalidate();
        _frmWWCModuleHost.FormPaint();
    }

提前致谢!

~帕特里克


编辑


dgvSearchResults_CellContentClick 现在是最新的。当我逐步执行此代码时,它在此处获得了正确的值,但它从不更新实际的 HUD。


编辑2


我的问题是我声明了一个新的 frmWWCModuleHost 而不是将 ref 传递给现有的吗?我对此的理解还很薄弱。


编辑 3


我已经通过执行以下操作“解决”了这个问题:在我声明子窗体的父窗体上,我将 this 作为参数传递。然后在子窗体的构造函数中我添加了 _frmWWCModuleHost = m_parent;我的父窗体上有一个 UpdateHUD() 方法,我从子窗体的 _CellClick 事件中调用它。

现在重新表述我的问题;这样做有什么明显的错误吗?

最佳答案

当子表单搜索完成时,引发“SearchCompleted”事件。然后任何东西(包括父表单)都可以订阅该事件并检索详细信息。

示例请参见以下 NotepadCode:

class ParentForm
{
    private readonly ChildForm childForm;

    public ParentForm()
    {
        InitializeComponent();

        childForm = new ChildForm();

        childForm.SearchCompleted += childForm_SearchCompleted;
    }

    private void childForm_SearchCompleted(object sender, SearchCompletedEventArgs e)
    {
        // Update the display
        lblName.Text = e.DataToDisplay;
    }
}

class ChildForm
{
    public event EventHandler<SearchCompletedEventArgs> SearchCompleted;

    private void Search(string query)
    {
        // Do the searching

        OnSearchCompleted(new SearchCompletedEventArgs([arg values]));
    }

    public void OnSearchCompleted(SearchCompletedEventArgs args)
    {
        if (SearchCompleted != null)
        {
            SearchCompleted(this, args);
        }
    }
}

关于c# - 将数据从子窗体发送到父窗体 TextBox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/706326/

相关文章:

c# - 你如何通过索引从列表框中获取文本?

c# - 从 C# 调用 onclick 方法

c# - 如何在 C# 中的纯字符串中插入/删除连字符?

c# - 是否可以在 winforms 应用程序中定义左手组合框(即左侧的滚动条)?

c# - 如何在对 C# .NET 3.5 服务器进行 DCOM 调用时可靠地检查客户端身份?

c# - 在 Windows 移动设备上托管 WebService/WCF?

C# 循环限制为 50 遍

c# - bool 逻辑/真值表和输出

c# - 使用 LINQ 连接 List<string> 中的所有字符串

c# - 参数化查询错误c#