2

プロジェクト> MyProjectのプロパティ>設定の下で、ダブルタイプのMyDoubleという名前のアプリケーション設定があります。有効範囲はユーザーです。デフォルト値は1.5です。WinFormsアプリケーションの設定が割り当てられていません。

私はそれを見て、アプリケーション全体を踏んでみて、値を表示するMessageBoxesを試してみました。私は、クラス(Form1)のレベル変数を設定しようとしている場所を除いて、そのすべての用途をコメントアウトしました。これは次のようになります。

double myDouble = Properties.Settings.Default.MyDouble; 

この値は常にゼロです。私はMessageBox myDoubleまたはアプリケーションの設定結果がゼロの場合。

一部のアプリケーション設定が機能しています。私はForm1_Shownイベントで2つのメッセージボックスを呼び出しました。一用途:

Properties.Settings.Default.MyDouble.ToString() 

及び他の用途:

Properties.Settings.Default.MyInt.ToString() 

第二つの出力正しい値。

このプロジェクトは、C#で書かれたWinFormsアプリケーションです。 Windows 10とVisual Studio 2017を使用しています。 このプロジェクトのフォームは、以前のプロジェクトからコピーされましたが、影響を受ける可能性はありません。以前のプロジェクトの価値は同じでした。私は手作業でこれらのアプリケーションの設定をタイプしました。スペルが正しいことを確認するために再確認しました。セットアッププロジェクトを無駄に削除しました。ソリューションをクリーンアップし、再構築しました。私はapp.configファイルもチェックしました。私は何か間違っているとは思わない。ここにあります:

これを修正する方法はありますか?

+0

あなたが設定範囲を確認してい? – user12345

+0

@ user12345しました。ユーザーのスコープがあることを反映するために質問を更新しました。すべてのアプリケーション設定にはユーザースコープがあります。 – DavidG

+0

デフォルト値が1.5で、値が0の場合。0であれば、少なくとも1回は設定を正常に保存しました。それはあなたが好きな値ではない、そう、起こります。 user.configファイルを編集して、うまくいけば一時的な問題を回避することができます。 c:\ users \ yourname \ appdata \ local \ projectname \ blablablaに戻るのはちょっと難しいです。 –

答えて

2

私は考える:何かが間違っていた。

ソリューションエクスプローラで.settingsファイルをダブルクリックします。このファイルのデフォルト名はSettings.settingsです。設定デザイナーで、設定の名前(MyDouble)を探します。各行は単一の設定を表します。

参照:Using Settings in C#

あなたは持っている:

<setting name="MyDouble" serializeAs="String"> 

そして、あなたが書く:

double myDouble = Properties.Settings.Default.MyDouble; 

、それは間違っている可能性があります... doubleからStringを変換しますか?

このページを参照してください:Managing Application Settings (.NET)とこの回答:What is the best way to store user settings for a .NET application?

は、このコードを試してみてください。

Properties.Settings.Default.MyDouble = 1.5; 
Properties.Settings.Default.Save(); 

、それはこれを試して後:

var myDouble = Properties.Settings.Default.MyDouble; 
+0

settings.settingsファイルが正しいです。他の二重および整数の値は、sの文字列をシリアライズするとも言います。私はそれがどういう意味か分かりません。正直なところ、私は今までこれまでファイルを開いたことさえありません。あなたが提供したコードはそれを修正します。どういうわけか私はビジュアルスタジオのバグにあったと思う。私はあなたのコードを実行しました。もちろん、新しい値を設定して保存します。今はそれが動作します。そのコードブロックは含まれていません。ありがとう。私は正しい答えとしてこれを選択しています。なぜなら、アプリケーションを強制的に値を上書きして保存しようとしたからです。 – DavidG

関連する問題