web-dev-qa-db-ja.com

Winforms-デザイナーで要素を表示/非表示にする方法は?

Winformsを使用して複数ページのアプリケーションを作成しようとしています。複数のパネルを使用することにしました-各パネルは異なるページを表すので、異なるコンテンツを表示する必要がある場合は、それらを切り替えることができます。

私の問題は、デザイナービューでパネルを積み重ねることです。フルスクリーンパネルが2つ以上ある場合、それらはすべて互いに重なり合い、以前に作成したパネルが表示されません。これに対する解決策はありますか?可視性を変更しても、デザイナーのビューには影響しません。レイヤーを表示/非表示にするフォトショップのようなオプションと考えてください。 Visual C#2010 Expressを使用しています。

27
Kamil N.

ここにいくつかのオプション:

  1. 使用 Document Outline 見る (View --> Other Windows --> Document Outline)気になるパネルを選択します。それを右クリックしてBring to Frontを他のすべての前に置きます。
  2. これはおそらくあなたがやっていることとは関係ありませんが、TabControlの使用を検討するかもしれません。これは、設計時に視覚的に混乱させることができます。これは、ユーザーが表示しているパネルを手動で変更できるようにする場合にのみ妥当なソリューションです。
  3. パネルをカスタムのUserControlクラスに移動して、個別に操作することを検討してください。これらのパネルのコンテンツとロジックが合理的に自己完結型である場合は、コードをより適切に再構成するためだけにとにかくこれを行うことができます。

補遺TabControlのタブをユーザーに表示しないようにするハックを使用することもできます。 TabControlをフォームに配置し、実行時にItemSizeの高さを1に設定します。これにより、ユーザーが自分でタブを変更することは(ほとんど)不可能になりますが、デザイナーで表示されているタブを変更することはできます。

myTabControl.ItemSize = new Size(myTabControl.ItemSize.Width, 1);

理由のため、これをhackと呼んだことに注意してください。TabControlsは、このように使用するためのものではありませんでした。それは機能しているように見えますが、すべてのハックと同様にいつでも壊れる可能性があるため、最後の手段としてのみ実行する必要があります(後で頭痛が発生する場合は私を責めないでください...)。要するに、私はしないでくださいこのハックをお勧めします。可能性として提供するだけです。

29
ean5533

この種類のシナリオを管理するには、[フォーマット]> [順序]の[最前面へ移動]または[最背面へ移動]を使用しますが、そうです、可視性はランタイムのみ(AFAIK)です。

乾杯

5
Luc Morin

これを行う正しい方法についてはわかりませんが、この場合私が自分で行うのはjystがコントロールを非常に小さくし、後でプログラムの実行時にサイズと場所を変更することです。

1
Saeid Yazdani

This.richTextBox1.Visible = falseを試してください。 Form1.cs内(デフォルトの名前「richTextBox1」でリッチテキストボックスを非表示にしようとしていると想定)

0
William

それで、VS Designerビューでパネルを表示/非表示にしたい(実際の実行可能ファイルが実行されているときだけでなく)正しいですか?

this のようなものは役に立ちますか?

そうでない場合は、パネルの代わりにカスタムユーザーコントロールを作成して、可視性プロパティを好きなように設定したり、このタイプの機能を提供するWPFを使用したりすることができます。詳細については ここ をクリックしてください。

0
Ami Schreiber

この状況で使用した1つのアプローチは、ドキュメントエクスプローラーウィンドウを使用して、作業中のパネルを前面に表示することです。

0
RQDQ

許容できる場合は、TabControlコントロールの使用を検討し、Panelコントロールをそれぞれ別のタブに配置してください。次に、タブを切り替えるか、プログラムで適切なタブを削除してコントロールに追加することで、正しいページを非表示にして表示できます。

また、レイアウトが異なる2つのウィンドウを使用して、ウィンドウ間の切り替えを示すこともできます。

数個以上のパネルを使用する場合は、それらを個別のコントロールに配置して、アプリケーションのフォーム内でコントロールを使用することを検討できます(つまり、必要に応じてプログラムで追加します)。このようにして、各コントロール(つまりPanelの各コンテンツ)を個別に設計し、他のPanelsを表示することができます。

これらの各提案により、いくつかのUI部分がさらに分離されます。これは、取得したレイアウトのそれぞれがアプリケーションの個別の部分に関連付けられている場合に望ましいことがあります。これらの提案を使用すると、管理にdeisgnerを使用するのがはるかに簡単になります。

0
Lukasz M