C# 属性为';重置';有两种形式?

C# 属性为';重置';有两种形式?,c#,winforms,C#,Winforms,我正在使用主窗口和设置。MainWindow是启动窗口,我可以从中打开设置。我正在尝试在两个窗口之间共享一些属性。现在,我在设置中声明了公共属性: public partial class Settings : Form { private string property1 public Settings() { InitializeComponent(); this.changeSettings(); } public

我正在使用主窗口和设置。MainWindow是启动窗口,我可以从中打开设置。我正在尝试在两个窗口之间共享一些属性。现在,我在设置中声明了公共属性:

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;
    }
}
我可以在MainWindow中创建设置实例,并从中更改属性:

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.property1中,它不会更新显示其值的文本框。一个简单的解决方案是:

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;
    }
}

.Net代码中的公共成员应该是大写的。我明白了。。这不是问题的原因,对吗?不,不是。为什么文本框不是空的?你需要更新什么代码?是的,已经更新了。顺便说一句,代码不是我在应用程序中使用的。这只是为了(希望)给你们足够的信息,让你们知道我是如何处理这些属性的,也许还能找出哪里出了问题。。。