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

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

新規登録して質問してみよう
ただいま回答率
85.37%
ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

C#

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

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

Q&A

解決済

1回答

441閲覧

C# Windowsformアプリケーションで他クラスのコンボボックスの値を取得したい

mmm1111

総合スコア3

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

C#

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

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

1グッド

1クリップ

投稿2024/07/28 09:51

編集2024/07/28 10:52

実現したいこと

settingクラスとformクラスがあるとします。
formクラス内のボタンを押すとShowDialogとしてsettingクラスが開きます。
settingクラスでコンボボックスのデータをOKボタンが押されたら保存し、そのデータをformクラスに表示したいです。
また、アプリ起動時にも前回保存されたデータをformクラスに表示したいです。

発生している問題・分からないこと

まず、データの保存方法が分かりません。
iniファイルに保存出来ればと思うのですが、そのやり方がわかりません。
最初はオンメモリでもいいのですが、そのやり方もわかりません。

該当のソースコード

特になし

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

調べましたが、保存方法についてよくわかりませんでした。

補足

特になし

TN8001👍を押しています

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

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

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

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

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

YAmaGNZ

2024/07/28 10:07

調べた結果どのような方法があり、それについて何が分からなかったのでしょうか? 「C# データ 保存」とでも検索すればいろいろな方法が出てくるかと思います。 またsettingクラスとformクラスの関係はどのようになっているのでしょうか? どちらかのクラスがもう片方のクラスのインスタンスを保持しているとかしているのでしょうか?
YAmaGNZ

2024/07/28 12:17

formクラスからsettingクラスをShowDialogしているのであれば、settingクラスにそのComboBoxの値を渡すためのプロパティを作成し、ShowDialogから戻ってきたらそのプロパティから値を取得すればいいのではないでしょうか。
guest

回答1

0

ベストアンサー

settingクラスでコンボボックスのデータをOKボタンが押されたら保存し、そのデータをformクラスに表示したいです。
また、アプリ起動時にも前回保存されたデータをformクラスに表示したいです。

ユーザー設定を保存する機能は、すでに用意されています。
アプリケーション設定とユーザー設定の使用 - Windows Forms .NET Framework | Microsoft Learn
c# properties.settings - Google 検索

アプリ単位で設定を持つので、複数フォームから容易にアクセスできます。
Visual Studioにデザイナも用意されているので編集も簡単です。
デザイナ画像

cs:Form1.cs

1using System.Configuration; 2using System.Diagnostics; 3 4namespace Q5v7v77os02rppz; 5 6public partial class Form1 : Form 7{ 8 public Form1() 9 { 10 InitializeComponent(); 11 12 // バインドすればこれだけ 13 label1.DataBindings.Add(new Binding("Text", Properties.Settings.Default, "comboBox1Value")); 14 15 // バインドしない場合は起動時に反映 16 //label1.Text = Properties.Settings.Default.comboBox1Value; 17 } 18 19 private void Button1_Click(object sender, EventArgs e) 20 { 21 if (new Setting().ShowDialog() == DialogResult.OK) 22 { 23 // バインドしない場合は変更時にも反映 24 //label1.Text = Properties.Settings.Default.comboBox1Value; 25 } 26 } 27 28 private void Button2_Click(object sender, EventArgs e) 29 { 30 // ユーザー設定の保存場所 31 var userSettingFilePath = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal).FilePath; 32 33 if (File.Exists(userSettingFilePath)) 34 { 35 Process.Start(new ProcessStartInfo 36 { 37 FileName = "notepad", 38 Arguments = userSettingFilePath, 39 UseShellExecute = true, 40 }); 41 } 42 } 43 44 private void Form1_FormClosed(object sender, FormClosedEventArgs e) 45 { 46 // 読み込みは自動でやってくれるが保存は手動(忘れないように注意!) 47 Properties.Settings.Default.Save(); 48 } 49}

cs:Setting.cs

1namespace Q5v7v77os02rppz; 2 3public partial class Setting : Form 4{ 5 public Setting() 6 { 7 InitializeComponent(); 8 9 // ユーザー設定値をコンボボックスに反映 10 comboBox1.Text = Properties.Settings.Default.comboBox1Value; 11 12 // 以下デザイナで設定済 13 //comboBox1.Items.AddRange(new object[] { "default", "value1", "value2" }); 14 //button1.DialogResult = DialogResult.OK; 15 //button2.DialogResult = DialogResult.Cancel; 16 //AcceptButton = button1; 17 } 18 19 private void Button1_Click(object sender, EventArgs e) 20 { 21 // ユーザー設定値をコンボボックス値に変更 22 Properties.Settings.Default.comboBox1Value = comboBox1.Text; 23 } 24}

アプリ動画

注意点

コントロールやイベントは、適宜配置・設定してください。

.NET Frameworkの場合

System.Configurationを参照に追加してください。
参照の追加

.NET(Core)の場合

Propertiesフォルダ・Settings.settingsがデフォルトでは作られないので、プロジェクトのプロパティを開いて作成してください。
プロジェクトのプロパティ画面

投稿2024/07/28 12:37

編集2024/07/28 14:57
TN8001

総合スコア9807

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

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

mmm1111

2024/08/25 00:36

その方法で実装致しました。 ご回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問