我使用的是MainWindow和Settings。主窗口是启动窗口,我可以从中打开设置。我正在尝试在两个窗口之间共享一些属性。现在,我已经在设置中声明了公共属性:
public partial class Settings : Form
{
private string property1
public Settings()
{
InitializeComponent();
this.changeSettings();
}
public string property1
{
get { return property1; }
set { property1 = value; }
}
public void changeSettings()
{
textbox.Text = property1;
}
}
我可以在主窗口中创建一个设置实例,并从那里更改属性:
public partial class Mainwindow : Form
{
private Settings settings;
public MainWindow()
{
InitializeComponent();
settings = new Settings();
this.changeSettings();
}
private void changeSettings()
{
settings.property1 = "value";
textbox.Text = settings.property1;
}
private void openSettings_Click(object sender, EventArgs e)
{
settings.ShowDialog();
}
}
比方说,我想更改两种形式的文本框的内容。对于MainWindow,这是有效的,即我可以将值存储在属性中并再次访问它。然而,我打开"设置"并尝试更改其文本框,属性为空!什么可以解释这一点?
您在设置属性后从未调用过changeSettings()
。
您可能应该去掉该方法,直接在setter中更新文本框。
缺陷在Settings.properties1中,它不会更新显示其值的文本框。一个简单的解决方案是:
public string property1
{
get { return textBox1.Text; }
set { textBox1.Text = value; }
}
显示对话框后,您还需要更新主窗口的文本框:
private void openSettings_Click(object sender, EventArgs e)
{
settings.property1 = textbox.Text;
if (settings.ShowDialog() == DialogResult.OK) {
textbox.Text = settings.property1;
}
}