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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Visual Basic .NET

Microsoft Visual Basic .NET (VB.NET)とはオブジェクト志向のプログラム言語です。 Microsoft"s Visual Basic 6 のバージョンアップとしてみることができますが、Microsoft.NET Frameworktによって動かされています。

Visual Studio 2012

Microsoft Visual Studio 2012は、Microsoftによる統合開発環境(IDE)であり、多種多様なプログラミング言語に対応しています。 Visual Studio 2010の次のバージョンです

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

3回答

2600閲覧

.NETで、フォームのコントロール名とその値をテキストに出力したい

churi_yuzuki

総合スコア32

Visual Basic .NET

Microsoft Visual Basic .NET (VB.NET)とはオブジェクト志向のプログラム言語です。 Microsoft"s Visual Basic 6 のバージョンアップとしてみることができますが、Microsoft.NET Frameworktによって動かされています。

Visual Studio 2012

Microsoft Visual Studio 2012は、Microsoftによる統合開発環境(IDE)であり、多種多様なプログラミング言語に対応しています。 Visual Studio 2010の次のバージョンです

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2017/03/08 07:53

###前提・実現したいこと
3枚の画面が存在するアプリケーションを作成しています。
そこで、アプリケーションの終了時に、前回の状態を復元できるように、各コントロールの名前とその値を格納しようと考えました。

画面には、コンボボックス、ラジオボタン、ピクチャーボックス、テキストボックス、データグリッドビューなど様々存在しています。

###発生している問題・エラーメッセージ
コントロール名の列挙は下記コードで実現できたのですが、コントロール毎の値は、.textであったり.valueであったり.imageであったりするので悩んでいます。

###該当のソースコード

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click Dim all As Control() = GetAllControls(Me) For Each c As Control In all MsgBox(c.Name) Next End Sub Public Function GetAllControlsa(ByVal top As Control) As Control() Dim buf As ArrayList = New ArrayList For Each c As Control In top.Controls buf.Add(c) buf.AddRange(GetAllControls(c)) Next Return CType(buf.ToArray(GetType(Control)), Control()) End Function

###その他
もし前回の状態を復元するのにもっと良い方法があれば教えていただければと思います。
ご教授願います。

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

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

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

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

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

guest

回答3

0

ベストアンサー

バインドとシリアライズを使ってみてはどうでしょうか?

バインドというのは、データとユーザーインターフェースを結び付けて同期させる方法で、例えば Windows.Forms だと次のようにします。
[Windows Form] データバインドのやり方
これでオブジェクトと UI がリンクし、どちらかのプロパティを変えると他方も変わるようになります。
つまりこれで画面に入力したデータが一つのオブジェクトとして扱えるようになります。
例ではテキストのみ扱っていますが、チェックボックスや画像も同様にバインドできます。

そしてこのオブジェクトの保存に使うのがシリアライズです。
例えば オブジェクトの内容をファイルに保存、復元する のようにします。
これでオブジェクトの内容が XML 形式の文字列になりました。

以上でユーザーの入力が最終的に文字列になったので、これを保存・復元してください。

追記

「どちらかのプロパティを変えると」と書きましたが、これはオブジェクトが INotifyPropertyChanged を実装している場合で、今回の例には当てはまりませんでした。この例では画面による変更がオブジェクトを変更させますが、逆は必ずしもそうなりません。

投稿2017/03/08 08:48

編集2017/03/08 09:12
Zuishin

総合スコア28656

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

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

churi_yuzuki

2017/04/17 08:55

返事が大変遅れてしまい申し訳ありません。 ご丁寧にリンクまで記載してくださったのでベストアンサーに選ばせて頂きました。 勉強します、ありがとうございました!
guest

0

そういう問題はデータバインディングで解決が基本。そもそも、一つのコントロールにつき、複数の値を保存したいほしいなんて言うことは、有り得る話。対象の指定がややこしくなるので、バインディングが有効。
ただ、winformはそれほどデータバインディングがよくないので、使うのが面倒。WPFはxaml側でできるから見通しがいいけど。

そのため、今のコードで、対象の型の数が限られているなら、swich文で型を判別して処理を切り替えればいいと思います。

今時は、オブジェクトのシリアライズ・デシリアライズはJSONがスタンダードです。JSON.NETを使いましょう

投稿2017/03/08 09:53

kiichi54321

総合スコア1984

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

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

churi_yuzuki

2017/04/17 08:56

返事が大変遅れてしまい申し訳ありません。 JSONも勉強してみようと思います。。 ありがとうございます!
guest

0

何をしたいのか分からないのでハズレかもしれませんが・・・

Settings を使うことを検討してはいかがですか? 以下の記事は WPF アプリの例ですが Windows Forms アプリでも同様に Settings は利用できます。

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

投稿2017/03/08 08:28

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

churi_yuzuki

2017/04/17 08:56

返事が大変遅れてしまい申し訳ありません。 結局一部Settingsを使う方向で進めました。 ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問