- PR -

【VB.Net Windows】TabControlのTextBoxに初期値設定したい。

1
投稿者投稿内容
One.net
大ベテラン
会議室デビュー日: 2008/03/01
投稿数: 202
投稿日時: 2009-03-20 13:20
【状況説明】
WindowsXP Visuai Basic 2005 Exprese Edition でWindowsアプリケーションを開発しています。
あるアプリで社員情報の閲覧画面を作成ししました。表示項目が多いで TabControlを使って
DataBinding したTextBox等のコントロールを各TabPageに配置しました。
画面右側に社員名をListBoxで一覧表示して、この一覧から社員名を選択して左画面に選択した
社員の詳細をTabControlで表示しています。
また画面下部には[新規作成]ボタンを配置して社員BindingSource.AddNew() で新規作成画面に
切り替わるようになっています。
そしてこれらの動作は新規作成を含めて正常に動作していますが、次の初期設定が動作しません。

新規作成画面に切り替えたときに幾つかの項目に初期値を設定したく次のようなコードを記述しました。
Me.TextBox.Text = "初期設定値"
ところが[新規作成]ボタンを押した時点に表示されている TabPage に配置したTextBoxには設定
されますが、表示されていないTabPage のTextBoxには(そのTabPage を切り替えて見ても)設定
されていません。この設定されなかったTextBoxのTabPageを開いた状態で[新規作成]ボタンを押すと、
今度は正常に設定できます。

【質問内容】
上記のように各種コントロールの設定は、表示されているTabPage に配置されたコンとロール以外は
設定出来ないのでしょうか。或いは私の設定方法が間違えているのでしょうか。

TabControlには最初からTabPageが存在するのではなく、タブをクリックする時点で選択された
TabPageが作成されているようなので[新規作成]ボタンを押した時点では選択されていないTabPage
が存在していなく、該当コントロールも存在していないので、初期設定はされないと、いうこのなのでしょうか。

社員BindingSourceに直接初期設定する方法も調べてみましたが分りませんでした。
@IT会議室に関連質問がないか検索しましたが見つかりません。
よろしくご教示下さい。


編集:TabControlには最初から・・・を追加

[ メッセージ編集済み 編集者: One.net 編集日時 2009-03-20 22:56 ]
jiji
会議室デビュー日: 2009/03/10
投稿数: 16
投稿日時: 2009-03-21 14:15
初期値はバインディングしているコントロール等に設定するより、データ自体に設定したほうが面倒がないですよ。
BindingSource.AddNew()使うなら、戻り値object(デザイナで追加したなら多分中身はDataRowView)が有るから、それを利用してみては?
One.net
大ベテラン
会議室デビュー日: 2008/03/01
投稿数: 202
投稿日時: 2009-03-21 15:29
jijiさん、回答ありがとうございました。
DataBindingしているなら(初期値設定は)BindingSourceに設定したほうがよいということですね。
引用:

jijiさんの書き込み (2009-03-21 14:15) より:
初期値はバインディングしているコントロール等に設定するより、データ自体に設定したほうが面倒がないですよ。
BindingSource.AddNew()使うなら、戻り値object(デザイナで追加したなら多分中身はDataRowView)が有るから、それを利用してみては?


ところで、私も色々検討しましたがBindingSource.AddNew()のあとにどのように設定するのでしょうか?
jijiさんの言われる「戻り値object(デザイナで追加したなら多分中身はDataRowView)が有るから、
それを利用してみては・・・」との事ですがもう少し詳しくご指導いただければ幸いです。
jiji
会議室デビュー日: 2009/03/10
投稿数: 16
投稿日時: 2009-03-21 17:04
One.netさんがどのようなデータベースを扱っているかわかりませんので、
DBMS側→テーブルアダプタ→データテーブル→バインディングソース→コントロール等
の様な形と仮定します。
BindingSource.AddNew()の戻り値にはバインディングソースより左側で設定した初期状態が
入っているはずなので、それを何かに利用できるのでは?程度の意味です。
なお初期値は可能な限り左側で設定したほうが楽だと思います。
BindingSource.AddNew()実行した後の処理はBindingSource.AddingNew イベントで
e.NewObjectをキャストして行う方法があります。
詳しくはMSDNにて
jiji
会議室デビュー日: 2009/03/10
投稿数: 16
投稿日時: 2009-03-21 17:10
念のため追伸:
>社員BindingSourceに直接初期設定する方法
それは出来ないと思います。
One.net
大ベテラン
会議室デビュー日: 2008/03/01
投稿数: 202
投稿日時: 2009-03-21 17:34
jijiさん、ありがとうございます。
データベースの扱いは、DBMS側→テーブルアダプタ→データテーブル→バインディングソース
→コントロールの形です。vb.Netの勉強も1年半になりますがDataRowViewオブジェクトは使った
ことがありません。Googleで調べましたがまだ理解していません。後は自分調べて解決します。
ただ、jijiさんの言われる「初期値は可能な限り左側で設定したほうが楽だ」といわれる位置関係
の意味についてヒントをいただきたくお願いいたします。
それと、BindingSourceに直接初期設定する事は出来ないとの事了解しました。
ありがとうございました。
jiji
会議室デビュー日: 2009/03/10
投稿数: 16
投稿日時: 2009-03-21 19:27
>「初期値は可能な限り左側で設定したほうが楽だ」
これは単純に右に行くほど、より多くのものがぶら下る可能性があるからです。

例えばNullの状態が必要ない文字列フィールドならテーブル作成時点でNullstringを規定値にしておけば、
DBNullを考慮しない手抜きが出来ますw
そのあと、そのデータベースを使う特定のアプリケーションでの初期値を「犬」にしたければ
テーブルアダプタで設定できます。
そのアプリケーションを特定のユーザが使ったときの初期値を「ポチ」にしたければインスタンスを作った後の設定に
なるでしょう。
One.net
大ベテラン
会議室デビュー日: 2008/03/01
投稿数: 202
投稿日時: 2009-03-21 21:01
jijiさん、ありがとうございます。
「左側で設定したほうが楽だ」の意味は、次のような場合に左側でするほどラクだということですね。
DBMS側→テーブルアダプタ→データテーブル→バインディングソース→コントロール等

了解しました。何でも元で設定したほうが楽ということは今後とも忘れないようにします。大変参考になりました。感謝しています。
1

スキルアップ/キャリアアップ(JOB@IT)