我有一个包含名字、姓氏等的“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/