- PR -

DataGridViewの列の非表示について

投稿者投稿内容
Haru
常連さん
会議室デビュー日: 2009/02/18
投稿数: 37
投稿日時: 2009-02-19 14:49
お世話になります。
VS2008(VBアプリ)のDataGridViewの先頭列の非表示方法について教えてください。

DataGridViewでAccessのテーブルを表示するアプリを作成したのですが、先頭項目を非表示にすると、画面を再表示した時に非表示にしたはずの項目が表示されてしまいます。

アプリの構成としてはForm1(起動ボタン)--> Form2(テーブル表示)という構成で、
Form1で起動ボタンを押すとForm2にテーブルを表示させます。
起動ボタンでは
Form2.ShowDialog()
でForm2を表示させています。
Form2にはDataGridViewと閉じるボタン(DialogResult=OK)を配置し、テーブル表示後、ボタンで閉じます。

テーブルの項目はA,B,C,Dです。
A:非表示、B:表示、C:非表示、D:表示とした時に、最初にForm2を表示したときはB,Dのみ表示されるのですが、画面を閉じて再度表示させるとA,B,Dが表示されます。
(Aは表示されてしまいますがCは表示されません)

A:非表示、B:非表示、C:表示、D:非表示とした時には、再表示でA,Cが表示されます。
(Aは表示されてしまいますがBは表示されません)

A:表示、B:非表示、C:表示、D:非表示とした時には、再表示しても表示項目は変わりません。

以上の現象を整理すると先頭項目が非表示の時、再度表示した時に先頭項目の非表示が解除されてしまうように見えます。

仕様なのでしょうか?
108
常連さん
会議室デビュー日: 2007/12/12
投稿数: 45
投稿日時: 2009-02-19 16:29
仕様ではないと思います。

どんな制御をされているのかわかりませんが、
制御の条件が1度目とそれ以降で変化ないか とか
A列のVisibleプロパティを変更している部分を洗うしかないと思います。
Haru
常連さん
会議室デビュー日: 2009/02/18
投稿数: 37
投稿日時: 2009-02-19 17:26
引用:

108さんの書き込み (2009-02-19 16:29) より:
仕様ではないと思います。

どんな制御をされているのかわかりませんが、
制御の条件が1度目とそれ以降で変化ないか とか
A列のVisibleプロパティを変更している部分を洗うしかないと思います。



自分では特別な制御はしていません。
前述の通りフォームを二つ用意し、テーブルの表示を行っているだけです。
テーブル項目の表示・非表示はデザイナーの列の編集で該当項目のVisibleプロパティをF切り替えていて、実行時には(自分では)変更していません。

King
ぬし
会議室デビュー日: 2008/06/20
投稿数: 284
投稿日時: 2009-02-19 17:44
自分でやっていないにしても
デバッグするなりして Visible がちゃんと設定されているか、
設定されていないとしたらどのタイミングでおかしくなっているか、
を洗い出すべきではないでしょうか。

「プログラムを実行してこういう現象が起こりますがなぜですか?」
と言われても
「どういうロジックが走っているか調べて下さい。」
としか言えないと思います。
だってソースはあなたしか持ってないのですから。
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2009-02-19 18:20
引用:

Form2.ShowDialog()


暗黙のインスタンスを使ったいるから発生する問題でしょうね。
自前でForm2のインスタンスを作っていれば発生しないのでは?

http://www.atmarkit.co.jp/fdotnet/special/vb6tovb2005mig02/vb6tovb2005mig02_01.html
Haru
常連さん
会議室デビュー日: 2009/02/18
投稿数: 37
投稿日時: 2009-02-19 18:39
引用:

todoさんの書き込み (2009-02-19 18:20) より:
引用:

Form2.ShowDialog()


暗黙のインスタンスを使ったいるから発生する問題でしょうね。
自前でForm2のインスタンスを作っていれば発生しないのでは?

http://www.atmarkit.co.jp/fdotnet/special/vb6tovb2005mig02/vb6tovb2005mig02_01.html



やはりそうでしたか・・・
教えて頂いたHPを見て納得しました。

ありがとうございました。
King
ぬし
会議室デビュー日: 2008/06/20
投稿数: 284
投稿日時: 2009-02-19 19:12
取り敢えず同様のプログラムを作成してみたところ
2度目に表示した際に DataGridView の1列目の非表示が解除される事は
ありませんでした。
(暗黙のインスタンスを使ってです)

解決(納得?)された様なのでこれ以上の情報は不要でしょうか。
Haru
常連さん
会議室デビュー日: 2009/02/18
投稿数: 37
投稿日時: 2009-02-19 20:23
引用:

Kingさんの書き込み (2009-02-19 19:12) より:
取り敢えず同様のプログラムを作成してみたところ
2度目に表示した際に DataGridView の1列目の非表示が解除される事は
ありませんでした。
(暗黙のインスタンスを使ってです)



再現しないとのことでしたので、私も新規にプロジェクト及びAccessDBを作成してみました。
最初は仰るとおり私のところでも再現しませんでしたので試しにフォームをネストさせてみたところ再現させることができました。

【やり方】
1.DataGridViewと閉じるボタンのForm3を追加してForm2から呼び出す。

※Form3で再現できます。
※もしかすると、DataGridViewを表示したFormから呼び出した時に発生する事象かも知れません。

【参考】※関係あるか分かりませんが・・
1.データ項目は日本語で作成しました。
2.テーブルの最初の項目はAutoNumber項目にしました。
3.非表示項目は先頭のAutoNumberの項目にしました。今回は試していませんが、非表示項目がテキストの場合でも発生していましたのでこの件はあまり関係ないように思われます。

引用:


解決(納得?)された様なのでこれ以上の情報は不要でしょうか。




そもそもFormのインスタンスを作成する必要があることすら知らなかった(自動で作成してくれるものと思っていた)ので、本来は明示的に作成する必要があることがわかりすっきりしたと云うことです。
実は、明示的にインスタンスを作成した場合は今回の事象は発生しないということに気づいていたのですが、コーディングスタイルとしてインスタンスの作成が必須のものなのか冗長なものなのか判断がつかず迷っていました。
教えて頂いたURLでFormのインスタンスは本来明示的に作成すべきものだということが分かったので、今後は暗黙のインスタンスでFormを呼び出すことはありません。

従って実用上はこの問題をこれ以上調べる必要はないのですが、やはり原因を究明したい気持ちはあります。
今後は単なる興味でしかないのですが、お付き合い頂けるのであればお願いしたいと思います。

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