我在窗体上有一个NumericUpDown控件。在应用程序设置/属性绑定中,对于value参数,我不能选择我的USER设置:Heures (Integer/USER)。
我试着用这种方式保存这个值:
Private Sub NumericUpDownHeures_Leave(sender As System.Object, e As System.EventArgs) Handles NumericUpDownHeures.Leave
My.Settings.Heures = NumericUpDownHeures.Value
My.Settings.Save()
End Sub
但它没有保存。其他设置(字符串/用户)没有问题。但是我不明白为什么设置(整数/用户)不保存
当你把"NumericUpDown1. "您必须将My.Settings.Heures
处的值设置为十进制。
In Form1_Load add:
NumericUpDownHeures.Value = My.Settings.Heures
并添加到按钮或其他小部件的事件侦听器:
My.Settings.Heures = NumericUpDownHeures.Value
我猜问题是Leave
事件没有像您期望的那样被触发,特别是如果用户只是单击向上/向下箭头。我怀疑它只有在用户实际单击值区域然后离开时才会触发。您可以通过调试来验证这一点,看看您的代码是否曾经被击中,或者通过显示来自该事件的简单提示框来验证。
我认为你会有更好的运气,如果你挂钩LostFocus
或ValueChanged
事件
我还想补充一点,以供将来看到这一点的人参考。
将您的设置保存为已经显示的设置My.Settings.Heures = NumericUpDownHeures.Value
到你的valuechange事件中,然后在form load事件中做反向操作。
问题是,当您首次初始化时,此值更改事件在表单加载之前触发,因此它将继续默认为您在设计器中设置的任何值,因为您正在使用设计器值覆盖设置值。
为了解决这个问题,你需要一个私有/公共布尔值在你的代码的顶部,只有设置为真一旦你的表单已经加载(设置为真在你的form_load事件的底部),然后你可以添加条件valuechange事件检查表单是否已经加载。如果是,则更改设置值,如果不是,则不要。
一个例子:
Private IsFormLoaded As Boolean = False
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
NumericUpDown1.Value = My.Settings.SavedNumValue
IsFormLoaded = True
End Sub
Private Sub NumericUpDown1_ValueChanged(sender As Object, e As EventArgs) Handles NumericUpDown1.ValueChanged
If IsFormLoaded = False Then Exit Sub
My.Settings.SavedNumValue = NumericUpDown1.Value
End Sub
OR
Private Sub NumericUpDown1_ValueChanged(sender As Object, e As EventArgs) Handles NumericUpDown1.ValueChanged
If IsFormLoaded Then
My.Settings.SavedNumValue = NumericUpDown1.Value
End If
End Sub