ゲーム馬鹿な日々


下手の横好きが格ゲーやネトゲをメインに、ゲームな日々を綴るブログ
by arc1230
プロフィールを見る
画像一覧
S M T W T F S
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31

10/06/14 VB2008備忘録

たしか、オレ。
名古屋に来たのは、VB2008での開発が出来るからって、
話できたんだけど、結局、触ってたのは、
名古屋にきて、すぐの1ヶ月と、今月の半月しか触ってない。

あとは、全部、VB6とExcelのVBAだけ。



んで、もって、
VB2008で開発できるっていっても、
現場のオレ以外の人間で、やってる人間がいない。

何コレ?
オレ、VB2008は挑戦してみたいとは言ってたけど、
相談相手いるってことできたんだけど・・・?w
まぁ、こんなんはしょっちゅうですね。

未だに、VB6・Access・Excelでのシステムが現役の現場なので、
VB2008を使って開発するほどの案件もないんだろうなぁ。

でも、何故かVB2008で作られたシステムがあって、
これを今、仕様追加している。

11月にも同じシステムの改修で触っていたシステムだが、
そのときは、画面制御の改修はなかったので、
今回の仕様追加で初めて、画面周りを触っている気がする。

そんな中、覚えたことを纏めておく。
前置きと愚痴が長すぎた。
----------------------------

とりあえず、誰も知らない教えてくれない状態は、
1日で腹立ててるもバカくさくなったので、
時間掛けて調べてやっていくことにした。
TRY&ERRORの繰り返しで進んでいくのは、
オレのいつもことだし。


○オブジェクト指向を意識するべき
 VB6も一応そうらしいけど、かなりなぁなぁ組めちゃうので。
 何が言いたいか。
 「フォームA、フォームBがある。
  AはBを呼び出し、Bで入力した内容を、Aに返す。」

 て、いう処理を作る場合。
 VB6だと、フォームA上で、フォームBをshowする。
 フォームBは必要な入力が終わったら、
 入力内容をフォームAのパブリックな変数かなんかに格納してから、
 HideかUnload Meして、フォームB自体を閉じる。
 
 一応、VB2008でも、そんな組み方できるらしい。
 ※実際、前任者のソースがそうなってる。
 
 でも、そうではなくて、
 フォームAで、フォームBのインスタンスを生成し、
 そのインスタンスのshowDialogをコール。
 フォームBで入力した内容は、フォームBのプロパティに格納。
 フォームBをclose。
 フォームAから、フォームBのプロパティから取得。
 フォームBをDispose(解放)

 と、組んだほうがそれらしい。
 closeとDisposeは、フォームを閉じる動作は一緒だけど、
 掴んでいるオブジェクトの解放は、Disposeでしか出来ない。


○ComboBoxやListBoxのItemDataプロパティがなくなった。
 こっちに来る前に技術書を読んで、頭にあったんだが、
 いざ直面して、覚えないとめんどくさい。
 
 VB6のComboBoxやListBoxは、表示データと実データを、
 分けて持つことができた。たしか実データがItemDataプロパティだったかな?
 
 VB2008では、それがない。
 例えば、「曜日を選択して、DBに登録するときは、コード化して登録したい」
 なんて時は、どうするか。
 
 2008では、ComboBoxやListBoxに、DataSourceプロパティがあるので、
 これを利用する。
 
 例えば、マスタテーブルからSELECTした結果をDateSourceに
 そのまま設定すれば、VB6のときのように、SELECTした結果を1件ずつ
 回してComboBoxやListBoxに格納しなくても、
 表示データの列はコレ、実データの列はアレと指定するだけで、
 ComboBoxやListBoxの中身が完成する。

 取るときも、コントロール名.valueで、実データの値が取得可能。
 また、初期表示でも、実データの値をコントロール名.valueに、
 設定することで、自動的に、comboIndexがその値にインデックスになっている。

 ちなみに、上記例だと、ComboBoxやListBoxにブランク行を作れないが、
 DateSourceプロパティに設定するDataTableオブジェクトを自分で、
 作ってしまえば、それも解決する。
 ただ、この場合は、DataTableオブジェクトにブランク行を設定した後、
 結局、SELECT結果を回して、DataTableオブジェクトに格納する手間が生じる。


○DataGridView関連
  VB6やってたころも、ほとんどDataGridとかスプレッドシートとか使った
  開発をやっていなかったので、少し苦労している。

  ○ヘッダーの2段表示
   これをやるには、DataGridViewのCellPaintingイベントで、
   ヘッダーを自分で編集するより方法がない。
   元々、そういうことをやれるように作られているコントロールではないので、
   HTMLのTABLEタグみたいな勝手が、プロパティだけでは設定できない。

   この話題自体は、かなり以前に上がっていて、
   方法としては、DataGridView自体を継承したカスタムクラスを作っておいて、
   いつでも使えるようにしておくのが好ましい。
   オレも、参考にして、実装させてもらった。
   ココ参照
   結局、こういうことやりたくなったら、自分でシコシコ組むしかないらしい。

  ○DataGridView内のコンボボックス
   この話題で少し現場に相談すると、何かとグレープシティのスプレッドシートが、
   どうたら言われるけど、ぶっちゃけ、今、グレープシティ関係ないから!
   
   これも、先に触れたコンボボックスのItemDataプロパティがないってのは同じ。
   やりたければ、先に触れたようにすれば出来る。
   ただ、デザインビューで、DataGridViewの列を作ってしまった場合は、
   DataGridViewComboBoxColumnを自分で作って、コンボの中身を設定。
   自作したコンボカラムを、挿入したい列に挿入。
   dgrview.Columns.Insert(dgrview.Columns("XXX").Index, 自作したcolumn)
   挿入後、元々プロパティで作っていた列を削除
   dgrview.Columns.Remove(oldColum)
   
   これで、普通のコンボボックス同様に扱える。
   DataGridView(2,2).Valueとかで、3行目3列目のコンボボックスで選択されている
   実データを取得できるし、代入でcomboIndexも自動で設定される。

   ココ参考
   ここに載ってるサンプルが理解できれば、やれるようにはなる。


気づくと備忘録というよりは、半分が現場への愚痴だった。

てかさー。
誰もわからんから、なんとか調べて実装して、もうチョイで出来る直前に、

「そんなことに時間を掛けているのが勿体無い」

とか言われると、
さすがに、「えーーーーーー・・・」ってならない?
オレだけ?
[PR]
by arc1230 | 2010-06-14 20:45 | 仕事

ファン

ブログジャンル

画像一覧