
VB.net2013にて、フォームアプリ作成中です。
アプリの構成としては、
Aフォーム、Bフォームの2画面があり
Aフォームの呼出ボタンにより、フォームを呼び出す仕組みです。
Bフォームでは、データ編集できる
下記のような入力コントロールが多数配置されています。
・テキストボックス ・スプレッドシート
・ラジオボタン ・ユーザコントロール各種
等々
※Aフォームには、編集状態を保持するために
Bフォームのインスタンスを保持しています。
Bフォームには、キャンセルボタンが配置してあり、
これにより編集状態を、画面を開きなおした段階まで戻したいと思っています。
Bフォームを表示する際に、
Aフォームの保持している、Bフォームのインスタンスを
クローンコピーし退避しておくことで
Bフォームクローンで元に戻そうと構想しています。
◾︎案1ーーー
memberwisecloneのクローンでは、
Bフォームの参照型のメンバをディープコピー出来ないようでした。
ーーーーーー
◾︎案2 ーーー
下記参考サイトより、
メモリ上に一旦シリアライズして、コピーする方法は、
基底であるFormクラスがシリアライズできないため
こちらも出来ませんでした。
d.hatena.ne.jp/tekk/touch/20100131/1264913887
ーーーーーー
フォーム上のコントロールをクローンする
他に良い方法はないでしょうか?
案1では、値型のメンバはmemberwisecloneでクローン出来たため
残りのコントロールをどのようにディープコピーするかで
悩んでいます。
InvokeMemberなるもので、対象のコントロールについて
別インスタンスを生成するというところは出来たのですが
コントロールの編集途中までの各種プロパティ値までは
引き継がれませんでした。
やはり別インスタンスとしたところに
再度入力値を設定しなおしてあげる必要があるのでしょうか?
作業工数と、汎用性を考えると
もっと他に良い方法があるのではないか
とは思うのですが・・・
もしよりよい方法をご存知の方いらっしゃいましたら
ご教授願います。よろしくお願いいたします。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
MVCでいえばViewにあたるFormにModelの役割もさせようとしてるのが、そもそもの間違いかと。
データはModelに持たせておいてFormの初期表示時にはModelを参照して表示、キャンセル時も同様。
No.1
- 回答日時:
> フォーム上のコントロールをクローンする
> 他に良い方法はないでしょうか?
クローンしない。
その代りに以下のようにする。
・Bフォームで編集するデータを表すクラス(以下、「データクラス」と略記)を用意する。
・Bフォームにデータクラスのインスタンスをもとにフォームの状態を変更するメソッド(以下、「状態変更メソッド」)を作る。
・また、Bフォームに現在のフォームの状態からデータクラスのインスタンスを新規生成して返すメソッドを作る。
・そのうえで、AフォームからBフォームを表示する際に、
(1) データクラスのインスタンスを生成する。
(2) Bフォームインスタンスを生成する。この時上記で生成したデータクラスインスタンスをBフォームに渡しておく。
(3) Bフォームでは渡されたデータクラスインスタンスを初期値として保持したうえで、状態変更メソッド呼び出す。
(4) 上記が終わったなら、AフォームでBフォームを表示させる。
ということを行う。
・Bフォームでは初期値として保持しているデータクラスインスタンスは絶対変更しない。
・Bフォームでキャンセルボタンが押された時、状態変更メソッドを呼び出す。これで表示状態は初期状態に戻る。
・Bフォームが閉じたとき、AフォームではBフォームのデータクラスインスタンス生成メソッドを呼び出し、その戻り値をもとにもとのデータを修正する。
……ところで、キャンセルボタンと書くと、どうしても「何もせずにフォームを閉じる」というイメージがあります。
問題のボタンは「初期値に戻す」ボタン、あるいは「リセット」ボタンと呼んだほうがよろしいかと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VB.net フォーム 親子 1 2022/07/04 19:00
- JavaScript ラジオボタンによるフォームの開閉を行いたい 3 2022/03/31 21:30
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
- Access(アクセス) マイクロソフト アクセス2021のフォームビュー作成でレイアウトを帳票形式から単票形式にあとから変更 1 2023/03/03 10:56
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- Access(アクセス) Access 登録ボタンからサブフォームの更新 1 2022/07/22 10:23
- JavaScript Google reCAPTCHAについて 1 2023/02/22 14:37
- その他(プログラミング・Web制作) 入力フォームへ、データを自動的に入力するプログラム。どうやって作る? 4 2023/01/16 10:24
- その他(プログラミング・Web制作) google formsを使ったタスク依頼フォーム作成におけるご相談 1 2023/06/22 15:55
- PHP php 確認表示画面で値をSESSIONから取り出す理由の解釈は正しいでしょうか? 1 2023/06/09 17:39
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ユーザーフォームを表示中にシ...
-
ユーザーフォーム上に現在日時...
-
ExcelVBAのユーザーフォームの...
-
VBAでユーザーフォームを再表示...
-
フォームウィンドウを最前面に...
-
オブジェクト(コントロール)...
-
ACCESSのフォーム、開くんです...
-
コントロールの存在確認
-
Microsoft Formsの「個人情報や...
-
VBA コンボボックスとテキスト...
-
VBAのテキストフォームの折り返...
-
C#でボタンクリックをキャンセル
-
クリックするたびに、フォーム...
-
[ExcelVBA] Application.Dialog...
-
VB.NETでフォームロード中のエ...
-
クリックイベントなのに、2回ク...
-
Hideについて(.NET)
-
エスケープキーを押して、フォ...
-
エクセルのVBAでユーザーフォー...
-
Userformを閉じて開く時、一瞬...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ユーザーフォームを表示中にシ...
-
ExcelVBAのユーザーフォームの...
-
Form_Load と Form_Activate の...
-
VBAでユーザーフォームを再表示...
-
Microsoft Formsの「個人情報や...
-
クリックイベントなのに、2回ク...
-
ユーザーフォームのテキストボ...
-
ユーザーフォーム上に現在日時...
-
ACCESSのフォーム、開くんです...
-
エクセルのチェックボックスの...
-
エクセルVBAのフォームを最...
-
VB.NETでフォームロード中のエ...
-
EXCEL VBA ユーザーフォームの...
-
VBA(エクセル)のユーザー...
-
【Excel VBA】ユーザフォームを...
-
Hideについて(.NET)
-
(Excel+VBA)ユーザーフォームの...
-
モーダルフォームとモードレス...
-
VBA コンボボックスとテキスト...
-
アクセス2013 フォームが...
おすすめ情報