c# - 保持次要形式的值(value)

标签 c# .net winforms

我有两个窗体:MainFormOptionsForm,其中有一个按钮 (OK),可以在 MainForm 上应用一些更改。当我第一次打开 OptionsForm 时,一切正常,使用默认值。

在我进行了一些更改并单击“确定”之后,应用了选项,但是当我第二次打开 OptionsForm 时,我想保留以前的值,而不是像它发生时那样的默认值。

OptionsForm是这样通过MainForm打开的

OptionsForm formOptions = new OptionsForm();
if (formOptions.ShowDialog(this) == DialogResult.OK)
{
    // etc..
}

//...

public string otherLabel
    {
        get { return formMainLabel.Text; }
        set { formMainLabel.Text = value; }
    }

在 OptionsForm 中我有一个 NumericUpDown 并且想保持它的值

private MainForm mainForm = null;
public OptionsForm(Form callingForm)
{
    mainForm = callingForm as MainForm;
    InitializeComponent();
}
// ...
private void btnOK_Click(object sender, EventArgs e)
{
     this.mainForm.someLabel= someBox.Value.ToString(); // NumericUpDown
     this.mainForm.otherLabel = "abc";       //>>> Getting NullReferenceException
     this.Close();
}

现在我可以保留我的设置,但我得到了一个 NullReferenceException。我试过了 this但它仍然无法正常工作。有什么建议吗?

最佳答案

ShowDialog() 已经被用来支持这个。它与 Show() 不同,除了它是模态的,它还可以防止表单对象在用户关闭时被释放。所以你可以简单地再次调用 ShowDialog() ,控件保持它们的原始值:

    private OptionsForm options = new OptionsForm();

    private void button1_Click(object sender, EventArgs e) {
        if (options.ShowDialog(this) == DialogResult.OK) {
            // etc..
        }
    }

    protected override void OnFormClosed(FormClosedEventArgs e) {
        options.Dispose();
        base.OnFormClosed(e);
    }

关于c# - 保持次要形式的值(value),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18620496/

相关文章:

c# - 如何使用 MongoDB 和 C# 驱动程序查询数组是否为 null 或为空?

c# - 我们如何隐藏 WebAPI 中的属性?

c# - 使用 Azure 中的 Composite C1 中的代码写入文件?

c# - 如何: Use async methods with LINQ custom extension method

c# - 哪个运行时性能更快 : WPF or Winforms?

c# - 在 C# 中多次运行 exe 命令的最快方法是什么?

c# - 是否可以通过 FTP 代理使用 C# FtpWebRequest?

.net - 应用程序洞察 : loggerFactory. AddApplicationInsights 在 .net core 2.2.0 中已弃用

c# - 如何在图表控件中添加网格右边框

c# - 如何在 vb.net windows 应用程序中打印 html 页面