关闭表单后如何保留 numericupdown 的值

How to retain the value from an numericupdown after closing a form

我有以下问题。我正在使用 C# .NET,我想在关闭表单后在 numericupdown 框中保存一个值。在我的应用程序中,我总共有 2 个表单,所以我想保存在第二个表单中输入的值,再次打开它后,我想查看最后一个值。在我的例子中,在我再次打开第二个表单后,numericupdown 值是空的。

我在想这样的事情:

namespace Project2
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            decimal a = numericUpDown1.Value;
            label2.Text = "N: " + a;
        }
    }
}

但是再次打开还是空的

您可以使用 static variable 来存储最后更新的值,并参考 class 名称,您可以在任何需要的地方使用它。

From MSDN: Two common uses of static fields are to keep a count of the number of objects that have been instantiated, or to store a value that must be shared among all instances.

喜欢,

namespace Project2
{
    public partial class Form2 : Form
    {
        public static decimal lastNumericUpDownValue = 0;  
        public Form2()
        {
            //For example: thiw will print lastest saved Numeric updown value.
            //For the first time, it will print 0
            Console.WriteLine(Form2.lastNumericUpDownValue);
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //Assign value to lastNumericUpDownValue variable. Look at how it is used.
            Form2.lastNumericUpDownValue = numericUpDown1.Value;
        }
    }
}

您可以创建一个 class,在本例中使用以下方法为 NumericUpDown 控件提供 set/get。

public sealed class Setting
{
    private static readonly Lazy<Setting> Lazy = 
        new Lazy<Setting>(() => new Setting());
    public static Setting Instance => Lazy.Value;
    public decimal NumericUpDownValue { get; set; }
}

在子窗体中,OnShown 将值 属性 设置为 Settings.NumericUpDownValue 然后 OnClosing 记住该值。

public partial class ChildForm : Form
{
    public ChildForm()
    {
        InitializeComponent();

        Shown += (sender, args) => 
            numericUpDown1.DataBindings.Add("Value", Setting.Instance, 
                nameof(Setting.NumericUpDownValue));

        Closing += (sender, args) => 
            Setting.Instance.NumericUpDownValue = numericUpDown1.Value;
    }
}

上面的代码,特别是设置 class 被称为单例模式,您可以在 Implementing the Singleton Pattern in C# 中了解更多信息。