C# Winforms-刷新父窗体
我知道关于这一点有很多问题,我看到了大多数问题,但仍然没有一个对我有用。 我有一个父母和一个孩子。子窗体有两个按钮-保存和取消,我希望在按下其中一个按钮时刷新父窗体(基本上是为了获取新数据) 我尝试在调用C# Winforms-刷新父窗体,c#,winforms,C#,Winforms,我知道关于这一点有很多问题,我看到了大多数问题,但仍然没有一个对我有用。 我有一个父母和一个孩子。子窗体有两个按钮-保存和取消,我希望在按下其中一个按钮时刷新父窗体(基本上是为了获取新数据) 我尝试在调用.showDialog()时将父窗体作为参数传递,然后在子函数中调用parentForm.Refresh()时,我可以看到它被调用了,但窗体没有刷新 我还尝试将this.Refresh()添加到父窗体的childForm.showDialog()行之后,希望在子窗体关闭后调用刷新。。不起作用 我
.showDialog()
时将父窗体作为参数传递,然后在子函数中调用parentForm.Refresh()
时,我可以看到它被调用了,但窗体没有刷新
我还尝试将this.Refresh()
添加到父窗体的childForm.showDialog()
行之后,希望在子窗体关闭后调用刷新。。不起作用
我也试过,但运气不好
if (ftpsf.DialogResult == DialogResult.OK) // what button should I call when I don't OK?
{
this.Refresh();
}
我还尝试订阅了儿童表单的结束事件,但没有成功
private void frm2_FormClosed(object sender, FormClosedEventArgs e)
{
this.Refresh();
}
有人有其他建议吗?请注意,
Form.Refresh方法的基本实现通常只是重新绘制表单,它不会!不要更新控件的状态。例如,为自己实现一个RefreshData
方法
无论如何,我建议您使用稍微不同的方法。我曾经用全局UI事件来解决这种情况,因此任何形式都可以对数据更改做出反应,而不管它来自何处)
例如,您可以定义如下事件:
public static class DataEvents {
public static event EventHandler DataChanged;
internal static void RaiseDataChanged() {
var handler = DataChanged;
if (handler != null)
handler();
}
}
private void RefreshData()
{
myGridView.Reload(); // just an example
}
然后在您的父窗体中收听此事件,并在您的子窗体中提出它,或者在您认为需要指示应反映的数据更改的任何地方。这样,您的父窗体和子窗体将更加紧密地耦合,这通常是一种更好的设计
例如,在表单构造函数中:
...
DataEvents.DataChanged += (s,e) => RefreshData();
...
当您指示更改时:
if (DialogResult == DialogResult.OK)
{
...
DataEvents.RaiseDataChanged();
...
}
您的RefreshData方法可以是这样的:
public static class DataEvents {
public static event EventHandler DataChanged;
internal static void RaiseDataChanged() {
var handler = DataChanged;
if (handler != null)
handler();
}
}
private void RefreshData()
{
myGridView.Reload(); // just an example
}
请注意,Form.Refresh
方法的基本实现通常只是重新绘制表单,它不会!不要更新控件的状态。例如,为自己实现一个RefreshData
方法
无论如何,我建议您使用稍微不同的方法。我曾经用全局UI事件来解决这种情况,因此任何形式都可以对数据更改做出反应,而不管它来自何处)
例如,您可以定义如下事件:
public static class DataEvents {
public static event EventHandler DataChanged;
internal static void RaiseDataChanged() {
var handler = DataChanged;
if (handler != null)
handler();
}
}
private void RefreshData()
{
myGridView.Reload(); // just an example
}
然后在您的父窗体中收听此事件,并在您的子窗体中提出它,或者在您认为需要指示应反映的数据更改的任何地方。这样,您的父窗体和子窗体将更加紧密地耦合,这通常是一种更好的设计
例如,在表单构造函数中:
...
DataEvents.DataChanged += (s,e) => RefreshData();
...
当您指示更改时:
if (DialogResult == DialogResult.OK)
{
...
DataEvents.RaiseDataChanged();
...
}
您的RefreshData方法可以是这样的:
public static class DataEvents {
public static event EventHandler DataChanged;
internal static void RaiseDataChanged() {
var handler = DataChanged;
if (handler != null)
handler();
}
}
private void RefreshData()
{
myGridView.Reload(); // just an example
}
请注意,Form.Refresh
方法的基本实现通常只是重新绘制表单,它不会!不要更新控件的状态。例如,为自己实现一个RefreshData
方法
无论如何,我建议您使用稍微不同的方法。我曾经用全局UI事件来解决这种情况,因此任何形式都可以对数据更改做出反应,而不管它来自何处)
例如,您可以定义如下事件:
public static class DataEvents {
public static event EventHandler DataChanged;
internal static void RaiseDataChanged() {
var handler = DataChanged;
if (handler != null)
handler();
}
}
private void RefreshData()
{
myGridView.Reload(); // just an example
}
然后在您的父窗体中收听此事件,并在您的子窗体中提出它,或者在您认为需要指示应反映的数据更改的任何地方。这样,您的父窗体和子窗体将更加紧密地耦合,这通常是一种更好的设计
例如,在表单构造函数中:
...
DataEvents.DataChanged += (s,e) => RefreshData();
...
当您指示更改时:
if (DialogResult == DialogResult.OK)
{
...
DataEvents.RaiseDataChanged();
...
}
您的RefreshData方法可以是这样的:
public static class DataEvents {
public static event EventHandler DataChanged;
internal static void RaiseDataChanged() {
var handler = DataChanged;
if (handler != null)
handler();
}
}
private void RefreshData()
{
myGridView.Reload(); // just an example
}
请注意,Form.Refresh
方法的基本实现通常只是重新绘制表单,它不会!不要更新控件的状态。例如,为自己实现一个RefreshData
方法
无论如何,我建议您使用稍微不同的方法。我曾经用全局UI事件来解决这种情况,因此任何形式都可以对数据更改做出反应,而不管它来自何处)
例如,您可以定义如下事件:
public static class DataEvents {
public static event EventHandler DataChanged;
internal static void RaiseDataChanged() {
var handler = DataChanged;
if (handler != null)
handler();
}
}
private void RefreshData()
{
myGridView.Reload(); // just an example
}
然后在您的父窗体中收听此事件,并在您的子窗体中提出它,或者在您认为需要指示应反映的数据更改的任何地方。这样,您的父窗体和子窗体将更加紧密地耦合,这通常是一种更好的设计
例如,在表单构造函数中:
...
DataEvents.DataChanged += (s,e) => RefreshData();
...
当您指示更改时:
if (DialogResult == DialogResult.OK)
{
...
DataEvents.RaiseDataChanged();
...
}
您的RefreshData方法可以是这样的:
public static class DataEvents {
public static event EventHandler DataChanged;
internal static void RaiseDataChanged() {
var handler = DataChanged;
if (handler != null)
handler();
}
}
private void RefreshData()
{
myGridView.Reload(); // just an example
}
也许是一句愚蠢的话,但如果你想重新开始。你为什么不使用:
Application.Restart()
也许是一句愚蠢的话,但如果你想重新开始。你为什么不使用:
Application.Restart()
也许是一句愚蠢的话,但如果你想重新开始。你为什么不使用:
Application.Restart()
也许是一句愚蠢的话,但如果你想重新开始。你为什么不使用:
Application.Restart()
你为什么要这么做?Windows窗体中没有多少次需要刷新。你可能很好,我不想在这里践踏你的知识或任何东西,只是你确定这就是你想要的实际功能吗?你是否覆盖了Refresh
方法来实际获取更新的数据?你希望Refresh
方法做什么?Refresh
是一个图形化的东西,它与数据值无关,您需要研究数据绑定,或者创建一个可以调用以更新值的自定义方法。作为警告,如果更新数据绑定类中的一个值,它将更新数据绑定类中的所有值;这是一个问题,你为什么要这样做?Windows窗体中没有多少次需要刷新。您可能很好,我不想在这里或任何地方践踏您的知识,只是您确定这就是您正在寻找的实际功能吗?您是否覆盖了Refresh
方法以实际获取更新的数据?您希望Refresh
方法做什么