ゲーム馬鹿な日々
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 |
タグ
PS3 ブレイブルー ネット対戦 PSP 私生活 アドホックパーティ PSPo2 世界樹の迷宮3 名古屋出張 DS TOV ライチ モンスターハンター3 ガンダム戦記 SSF4 VB2008 Wii DS お医者さんと禁煙しよう デモンズソウル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も自動で設定される。
ココ参考。
ここに載ってるサンプルが理解できれば、やれるようにはなる。
気づくと備忘録というよりは、半分が現場への愚痴だった。
てかさー。
誰もわからんから、なんとか調べて実装して、もうチョイで出来る直前に、
「そんなことに時間を掛けているのが勿体無い」
とか言われると、
さすがに、「えーーーーーー・・・」ってならない?
オレだけ?
名古屋に来たのは、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も自動で設定される。
ココ参考。
ここに載ってるサンプルが理解できれば、やれるようにはなる。
気づくと備忘録というよりは、半分が現場への愚痴だった。
てかさー。
誰もわからんから、なんとか調べて実装して、もうチョイで出来る直前に、
「そんなことに時間を掛けているのが勿体無い」
とか言われると、
さすがに、「えーーーーーー・・・」ってならない?
オレだけ?
by arc1230
| 2010-06-14 20:45
| 仕事
LINK
■ゲーム実況ページ
すでに手遅れ・・・w
☆RO関連
■アンテナサイト
Favor'sRagnarok
RO.Engine
俺の美女アンテナ
■よく見るページ
騎士スレテンプレ
DanceParty
ROラトリオ
■Bijou鯖の人々
りちぇちっく☆わーるど
明日は明日の風が吹く♪
星座の戦士達
The boundless sky
天使の微笑み
■他鯖の人々
Load of the SAKAGE
Midnight Twilight Days
人生平々凡々。
時計で眠るものの日記
√Pri LOG+
烏黒堂
もっさり☆RO日記(仮)
すでに手遅れ・・・w
☆RO関連
■アンテナサイト
Favor'sRagnarok
RO.Engine
俺の美女アンテナ
■よく見るページ
騎士スレテンプレ
DanceParty
ROラトリオ
■Bijou鯖の人々
りちぇちっく☆わーるど
明日は明日の風が吹く♪
星座の戦士達
The boundless sky
天使の微笑み
■他鯖の人々
Load of the SAKAGE
Midnight Twilight Days
人生平々凡々。
時計で眠るものの日記
√Pri LOG+
烏黒堂
もっさり☆RO日記(仮)