【发布时间】:2016-12-29 09:47:39
【问题描述】:
我正在尝试制作一个用于编辑用户设置的应用程序并遇到了一个奇怪的问题。我正在使用user settings 读写,但它无法读取其中一个变量。
public MainWindow()
{
InitializeComponent();
input1.Value = Properties.Settings.Default.input1Setting;
input2.Value = Properties.Settings.Default.input2Setting;
}
private void input1_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
Properties.Settings.Default.input1Setting = Convert.ToDouble(input1.Value);
Properties.Settings.Default.Save();
}
private void input2_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
Properties.Settings.Default.input2Setting = Convert.ToInt16(input2.Value);
Properties.Settings.Default.Save();
}
private void OnlyNumberValidation(object sender, TextCompositionEventArgs e)
{
Regex regex = new Regex("[^0-9]+");
e.Handled = regex.IsMatch(e.Text);
}
和 xaml 滑块
<Slider ValueChanged="input1_ValueChanged" IsSnapToTickEnabled="True" TickFrequency="0.25" Minimum="1" Maximum="50" Name="input1" PreviewTextInput="OnlyNumberValidation"/>
<Slider ValueChanged="input2_ValueChanged" IsSnapToTickEnabled="True" TickFrequency="1" Maximum="2000" Minimum="0" Name="input2" PreviewTextInput="OnlyNumberValidation"/>
在 Visual Studio 设置编辑器中,input1 设置为 double,input2 设置为 int。 Botch 范围设置为用户。
问题是,只有滑块 input2 得到正确的值。 input1 始终设置为 1。
我尝试添加 MessageBox.Show(Properties.Settings.Default.input1Setting.ToString()) 在启动时,它仍然显示 1,但是 app.config 中 input1 的值(在 project/bin/debug/ 文件夹中的那个,在 local/company/project/1.0.0/ 和 Visual Studio app.config 中的那个是4)
upd1 将 4 更改为 4.0 没有帮助。仍然更改为 1。
【问题讨论】:
-
尝试在设置文件中将 input1 设置为
4.0。 -
@arbitrarystringofletters 没有帮助
-
表单的初始化可能会导致问题。您可以尝试将设置的值写入控制台而不是显示
MessageBox吗?在Main(string[] args)之后尝试此操作:Console.WriteLine(Properties.Settings.Default.input1Setting);,然后让控制台保持打开状态:Console.Read(); -
您在哪里/如何将值设置为 4?如果您使用存储在 Properties.Settings.Default.input1Setting 中的值,并且它显示为 1,您为什么认为它应该不同?您似乎没有正确设置设置。