C#でVisibleプロパティを変更できない!→別のコントロールの子になっていた

Windows10
Visual Studio 2019
Formアプリにて…

現象


あるコントロールのVisibleを特定の条件下でのみtrueにするんだけども、できない。
label1.Visible = true;
としているんだけど、ブレークポイントを貼って1行ずつ見てみても、trueが入らない…なぜだーーー!と思っていたら。

 

原因


コントロールの親がある場合、親のプロパティに影響されるものがあるらしく、まさにそれだった。

デザイナーで開いて、ドキュメントアウトラインで確認すると意図しないコントロールの配下に入ってしまっていた。デザイナーでコントロールを操作しているうちに、気付かず別のコントロールの配下になってしまったようだ。
親コントロール側のVisibleがfalseだったため、今回のコントロールのVisibleをtrueにしても変更できなかった、ということだった。

 

対応


ドキュメントアウトラインで、親コントロールの上に移動させた。Visibleにtrueが入るようになった。

 

ドキュメントアウトライン


コントロールが増えてくると裏に隠れたり細かい選択がしにくかったりする。
そんなときは「ドキュメントアウトライン」が便利。画面に配置しているコントロールの階層構造をリストで確認できる。

ドキュメントアウトラインは
Visual Studioメニュー>表示>その他のウィンドウ>ドキュメント アウトライン(Ctrl+Alt+T)
から表示できる。
上側が前面で、下側が背面。上に重なっているイメージの感覚どおりでわかりやすい。

 

ドキュメントアウトラインでの注意点


ドキュメントアウトラインでコントロールをドラッグすることで順序や階層を移動させることができるが、移動後にLocationプロパティが「0,0」に強制セットされてしまう。上下の移動だけでも「0,0」になってしまうので、操作前に控えておくと安心。またはドキュメントアウトライン上部の↑↓操作ボタンなら、Locationプロパティはそのまま保たれる。1つずつしか移動できないけど。

 

参考