属性有两种形式'reset'?



我使用的是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;
    }
}

最新更新