在Winforms中如何从另一个表单重新加载/重新初始化用户控件?

问题描述 投票:0回答:1

我有一个名为

WindowMain
的表单,它是我项目的主窗口。该表单有一个面板,每当单击主窗口上的“名册”按钮时,该面板都会显示一个名为
UserControlRoster
的用户控件。

这个

UserControlRoster
有一个数据网格视图,显示人员列表(或“名册”)以及许多标签(姓名、年龄等),每当在数据网格中选择他们时,这些标签就会填充每个人相应的数据.

当用户单击此

Name
上的
UserControlRoster
标签时,将显示一个对话框,允许他们更改该人的姓名。这工作正常,但是一旦他们单击“保存”,我需要
UserControlRoster
完全重新加载或重新初始化以使对名称的更改生效。

我想简单地说,我要问的是:如何通过另一个表单重新加载或重新初始化一个表单上显示的用户控件?我很迷失所以任何帮助将不胜感激!

当用户单击主窗体上的

Roster
按钮时,
Roster
用户控件将添加到面板中。

MainScreenPanel.Controls.Clear();
var uc = new UserControlRoster() { Dock = DockStyle.Fill };
MainScreenPanel.Controls.Add(uc);

当用户单击用户控件上的人名标签时,它会打开“编辑摔跤手姓名”表单:

wrestlerName = lblName.Text.ToString();

DialogEditWrestlerName EditWrestlerName = new DialogEditWrestlerName(wrestlerName);
EditWrestlerName.Show();

在“编辑摔跤手姓名”表单上,当用户单击“保存”时,该表单将关闭并再次打开主窗口。这显然是错误的。

WindowMain Main = new WindowMain();
Main.Show(this);
this.Close();
c# winforms user-controls
1个回答
0
投票

正如评论中提到的,由于二级表单已被取消,请切换为

ShowDialog()
而不是
Show()
。主窗体中的代码将停止,直到“对话框”消失:

// in the main form:
wrestlerName = lblName.Text.ToString();

DialogEditWrestlerName EditWrestlerName = new DialogEditWrestlerName(wrestlerName);
EditWrestlerName.ShowDialog(); // code STOPS here until "EditWrestlerName" is dismissed
// Here you can directly update the control,
// since the main form has access to it

如果辅助表单有“取消”选项,那么您可能需要检查

ShowDialog()
的返回:

// in the main form:
wrestlerName = lblName.Text.ToString();

DialogEditWrestlerName EditWrestlerName = new DialogEditWrestlerName(wrestlerName);
if (EditWrestlerName.ShowDialog() == DialogResult.OK) { // code STOPS here until "EditWrestlerName" is dismissed
    // Here you can directly update the control,
    // since the main form has access to it
}
© www.soinside.com 2019 - 2024. All rights reserved.