質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

3回答

3254閲覧

C#チェックボックス状態保存

wave_vague

総合スコア21

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2018/09/20 12:03

c#でTestIOツールのアプリを作っています。
アプリを終了する際にsetSettingでチェックボックスでチェックした箇所とIPアドレスを保存し、次回のアプリ起動時にgetSettingで前回と同じ内容を表示させたいです。

発生している問題・エラーメッセージ

ソリューションエクスプローラー > Hogeのプロパティ > 設定 で保持するのではなく、IOsetting.csに保持したい内容を定義し、TestIO.csで状態を設定と読み込みを行いたいです。

該当のソースコード

c#

1IOsetting.cs 2 3using System; 4using System.Collections.Generic; 5using System.Linq; 6using System.Text; 7using System.Threading.Tasks; 8 9namespace Test_IOtool 10{ 11 public class IOSetting 12 { 13 14 public static bool hasNormalOutput; 15 16 public static bool hasMaintenanceOutput; 17 18 public static bool hasRunStop; 19 20 public static bool hasRangeOutput; 21 22 public static bool hasDeviationDetection; 23 24 public static bool chkConnect; 25 26 public static string IPadress; 27 28 } 29}

c#

1TestIO.cs(途中省略) 2 3 4 //チェックボックスの状態を設定する 5 public void setSetting(IOSetting testIOSetting) 6 { 7 IOSetting.hasNormalOutput = true; 8 IOSetting.hasMaintenanceOutput = true; 9 IOSetting.hasRunStop = true; 10 IOSetting.hasRangeOutput = true; 11 IOSetting.hasDeviationDetection = true; 12 IOSetting.chkConnect = true; 13 IOSetting.IPadress = ""; 14 15 } 16 17 //チェックボックスの状態を読み取る(参照渡し) 18 public void getSetting(ref IOSetting testIOSetting) 19 { 20 //StreamReaderクラスのインスタンスを作成 21 //デスクトップにあるtest_io_tool.txtを読み込む 22 System.IO.StreamReader sr = (new System.IO.StreamReader(@"C:\Users\Desktop\test_io_tool.txt", Encoding.Default)); 23 24 //ファイルの最後まで読み込む 25 string stBuffer = sr.ReadToEnd(); 26 27 //srをクローズ 28 sr.Close(); 29 30 return; 31 }

試したこと

読み込みの際に参照渡しでやるとよいとアドバイスをいただいたのですが、いまいちよくわかりません。また、setSettingに記述している内容もこれでよいのかが分かりません。どのようにコードを書けばよろしいでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

何を作っているか不明ですのでハズレかもしれませんが・・・

アプリを終了する際にsetSettingでチェックボックスでチェックした箇所とIPアドレスを保存し、次回のアプリ起動時にgetSettingで前回と同じ内容を表示させたいです。

Windows Forms とか WPF アプリ等のように Settings が使えるのであればそれを使うのがよさそうです。

アプリの終了時のイベントのハンドラで情報を保存し、起動時のコンストラクタまたはロードイベントのハンドラで保存した情報を取得して表示させることはできます。

以下の画像の形式のデータが保存できますので、チェックボックスは bool 型、IP アドレスは string 型で Settings に保持してはいかが?

イメージ説明

やり方の具体例は以下の記事が参考になると思います。WPF アプリの記事ですが Windows Forms アプリでも同様なことは可能です。

Settings を使った WPF でのアプリケーション設定の保存
http://yohshiy.blog.fc2.com/blog-entry-253.html

投稿2018/09/21 03:17

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

wave_vague

2018/09/21 07:14

回答ありがとうございます。今回は画像のようなやり方ではなく、.txtファイルにチェックボックスやIPアドレスの情報を保持、次回アプリ起動時に.txtファイルから読み込んでアプリに前回チェックボックスをいれた箇所等と同じ状態を表示するといった内容のものを作りたいです。
Zuishin

2018/09/21 07:36

この方法で保存すると拡張子は .txt でなく .config ですが、テキストファイルとして保存されます。 中身は xml でこんな感じになります。 <?xml version="1.0" encoding="utf-8"?> <configuration> <userSettings> <WindowsFormsApp1.Properties.Settings> <setting name="hasNormalOutput" serializeAs="String"> <value>True</value> </setting> <setting name="hasMaintenanceOutput" serializeAs="String"> <value>True</value> </setting> </WindowsFormsApp1.Properties.Settings> </userSettings> </configuration> アプリを起動すると自動的に読み込まれますし、コントロールのプロパティとバインドできますのでコードを全く書かなくてもチェックボックスが前回の通りの状態になって便利です。 データを保存する標準的な方法なので、おすすめします。
退会済みユーザー

退会済みユーザー

2018/09/21 07:39

Zuishin さん、フォローをありがとうございました。 回答者さん、もともと備わている機能を有効に利用することをお勧めします。
guest

0

kiichi54321さんの回答が簡便で分かり易いですが、少し前に似たような質問がありました。 C# Windows Forms またはWPF で設定を保存させる方法

Visual Studioでアプリケーションの設定を保存する 辺りが参考になります。

今、諸般の事情で、"\ユーザー\User\AppData\Local\アプリ名"の下に "config.xml" に保存してます。(多分、場所は一緒)

参考情報として。

投稿2018/09/20 13:55

pepperleaf

総合スコア6383

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

JSON.NETをnugetで入れて、

public class IOSetting { public bool hasNormalOutput{ get; set; } public bool hasMaintenanceOutput{ get; set; }; public bool hasRunStop{ get; set; }; public bool hasRangeOutput{ get; set; }; public bool hasDeviationDetection{ get; set; }; public bool chkConnect{ get; set; }; public string IPadress{ get; set; };      static string FileName => $"{typeof(IOSetting).Name}.json"; public void Save() { System.IO.File.WriteAllText(FileName, JsonConvert.SerializeObject(this, Formatting.Indented)); } public static IOSetting Load() {        if(System.IO.File.Exists(FileName)) { return JsonConvert.DeserializeObject<IOSetting>(System.IO.File.ReadAllText(FileName)); } return new IOSetting(); } }

こういうのを作ると、

var setting = IOSetting.Load();

で、ロードができ、

setting.Save();

で、保存がなされます。
ファイルそのものは、現在の作業フォルダにIOSetting.jsonというのが保存されます。

あとは、開始時、読み込んだ情報を、当てはめれる。終了時、フォームの情報を読み取って、保存するをすればいいと思います。

投稿2018/09/20 13:24

kiichi54321

総合スコア1984

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

wave_vague

2018/09/21 07:11

回答ありがとうございます。これは保存するファイルは.txtなのですが、.txtでも同じような感じでしょうか?
kiichi54321

2018/09/21 07:47

やってみるとわかるけど、見やすいテキストで保存されているよ。素のテキストファイルだと、オブジェクトとのマッピングを自分で作らないとだめだから、このほうが楽ちん。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問