- - PR -
見えていないコントロールのVisibleを知りたい
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-10-18 21:16
環境:VS2003 & C# & WindowsForm
タブページに配置したコントロールは、親コンポーネントのタブページが選択されていないとき、常にVisible=falseです。(見えていないから当たり前といえばそうなんですが・・・) しかし、タブページが選択されていない時に同じVisible=falseのコントロールでも、タブページが選択されるとVisible=trueとなり見えるようになるコントロールとVisible=falseのまま見えないコントロールがあるわけで、その判別をしたいと思っています。 親コンポーネントのVisibleを引き継がない、コントロール本来のVisibleをあらわすプロパティーがないかとメンバ一覧を眺めていましたが、それらしいプロパティーが見つかりませんでした。 どのようにすれば取得できるのでしょうか? | ||||
|
投稿日時: 2006-10-18 23:13
設定した状態の Visible を返すプロパティなりメソッドを見つけられませんでした。
各コントロールごとに VisibleChanged を設定してそこで全てのコントロールのVisible 状態を覚えておくような手間のかかる処理しか考えられません。 そもそもなぜこのような判別が必要になったのでしょうか。 それがわかればこのような判別がいらなくなるような別解があるかもしれません。 | ||||
|
投稿日時: 2006-10-19 09:10
同感です。 何かの判別に必要だとして、Visible プロパティを使う必要性がありません。 それこそ、Tag プロパティやフラグなどで判別した方が、まだ意味が通じます。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2006-10-19 09:21
逆に、これを行いたい場面というものに興味はありますね。
_________________ R・田中一郎 - R.Tanaka.Ichiro’s Blog | ||||
|
投稿日時: 2006-10-19 10:07
レスありがとうございます。
取得はやっぱり無理なのですね。 なぜそのようなコントロールのVisibleが知りたいかなのですが、 下記動作をする既存アプリが存在するためです。 1、Form起動時に各種設定ファイルを読み込みこんで、各コントロールの表示非表示を決定 2、動作時にコンボボックスやチェックボックスの選択状況により、起動時の各コントロールの表示非表示を変更 3、見えているコントロールの内容だけ保存 今までは、コントロールが画面内に配置しきれたので問題はなかったのですが、今回修正で項目が増えたためコントロールをタブ上に分けて配置するという決定が下されました。1と3はすべての画面で共通に使われているため、あまり深く手を入れたくありません。 そもそもVisibleを使うのはおかしいという意見は、ごもっともなのですが今回の修正のためになるべく工数をかけたくなかったので、コントロール本来のVisibleを取得できないかと思った次第です。 #ちなみにTagは別の用途に使われていました。 | ||||
|
投稿日時: 2006-10-19 10:23
オhる。。。 | ||||
|
投稿日時: 2006-10-19 11:37
再現コード(VS2005)
タブ2つ、タブ1にButton1、タブ2にTextBox1とButton2
タブ2、つまりTextBox1が見えてるときにVisible=Falseにすると、タブを変更しても引き継がれる。 その他はだめみたい。。。 考えてみれば、入力項目により他のタブの項目の表示を切り替えるっていう場面はありえますね。 で、仕様ですと書いてある(--; http://support.microsoft.com/kb/834616/ja やはり自分で記憶しておくしかないね。 Tagがだめなら、(非)表示項目Collectionというのが一番簡単かも。 | ||||
|
投稿日時: 2006-10-19 12:36
まどかさんのリンクしてくださったページがきっかけで解決しました。
タブページのShow()メソッドを呼び出すと見えていないコントロールの本来のVisibleを取得することが出来るようです。 Visibleを取得する前にすべてのタブページのShow()を呼ぶことにしました。 ありがとうございました。 あと、いろいろ試していたときに気づいたのですが、 親タブページ表示、子コントロール表示の状態から タブで違うページを選択→子コントロールのVisibleにfalseを代入→再び親タブページを選択 の場合、コントロールが表示から非表示に変わるにもかかわらずVisibleChangedが走らないのですがこれも仕様でしょうか?なにかご存知であれば教えてください。 |
1