我有两个表单(Form_Graph(主表单),Form_Setting)和一个设置文件。当我单击“设置”按钮时,将使用ShowDialog()打开Form_Setting。
Form_Setting包含三个按钮确定,取消,应用和设置选项。现在的问题是,当我更改设置和更新设置文件时,单击“应用”按钮后,我无法将此设置应用于Form_Graph。 (Apply_OnClick将新设置保存在设置文件中。)
我尝试使用以下方法刷新Form_Graph:
Form_Graph obj = new Form_Graph();
Application.OpenForms [" Form_Graph"]刷新();
我也调试了它。所有Form_Graph代码都在路上执行,但尚未应用设置。
我知道第一种方式永远不会起作用,因为我创建了一个新表单,但第二种方法呢?
任何人都可以为此解决问题吗?
答案 0 :(得分:2)
我需要在Apply_OnClick上编写代码
// Get Form_Graph object
Form_Graph objGraph = (Form_Graph)Application.OpenForms["Form_Graph"];
// Create a method in Form_Graph class which apply all setting to components
objGraph.UpdateGraph();
// Now refresh Form_Graph
objGraph.Refresh();
答案 1 :(得分:0)
根据您的说明和评论,您需要重新加载表单以获取颜色和图片。您可以通过以下三种方式之一来完成:
InitializeComponent()
。这可能很危险,因为InitializeComponent()
也会做其他启动工作。InitializeComponent()
收集更新颜色和图形的所有代码,并将其移动到单独的函数中。在InitializeComponent()
之后以及从设置对话框返回时调用它。我认为第三种方法是最干净的方法。
另一种通常更干净的方法是使用应用程序设置。您只需转到表单设计器,选择控件并从“属性”窗口中选择“应用程序设置”。选择要绑定到设置的属性,然后从下拉列表中选择相应的设置。如果设置尚未存在,您只需单击“新建”按钮,设计人员就会为您创建一个。
这些设置会自动加载并为您保存。没有更多手动的东西。
要立即将设置传播到控件属性中,您可能需要在绑定到设置时更改默认更新事件。为此,请转到设计器文件并查找属性绑定语句:
this.TextBox1.DataBindings.Add("Text", Project1.Properties.Settings.Default.UserName, ""))
并将它们设置为在更改属性后立即更新:
this.TextBox1.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::Project1.Properties.Settings.Default, "UserName", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
答案 2 :(得分:0)
您无需在子级中创建父级的新实例。通常这样做的最佳方式是订阅来自子表单的事件,即Form_Setting
。您需要在子表单中创建一个事件,如下所示:
public event EventHandler SettingsApplied;
public void NotifySettingsApplied(EventArgs e)
{
if(SettingsApplied != null)
SettingsApplied(this, e);
}
public void Apply_OnClick(object sender, EventArgs e)
{
//trigger event here to notify main form
NotifySettingsApplied(e);
}
然后在您的父表单中,在构造函数或任何其他合适的位置订阅此事件:
public Form_Graph()
{
fs = new Form_Setting();
fs.SettingsApplied += new EventHandler(fs_SettingsApplied);
}
void fs_SettingsApplied(object sender, EventArgs e)
{
//update your main graph form here
}