我有两个窗体:MainForm
和 OptionsForm
,其中有一个按钮 (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/