Winformsを使用して複数ページのアプリケーションを作成しようとしています。複数のパネルを使用することにしました-各パネルは異なるページを表すので、異なるコンテンツを表示する必要がある場合は、それらを切り替えることができます。
私の問題は、デザイナービューでパネルを積み重ねることです。フルスクリーンパネルが2つ以上ある場合、それらはすべて互いに重なり合い、以前に作成したパネルが表示されません。これに対する解決策はありますか?可視性を変更しても、デザイナーのビューには影響しません。レイヤーを表示/非表示にするフォトショップのようなオプションと考えてください。 Visual C#2010 Expressを使用しています。
ここにいくつかのオプション:
Document Outline
見る (View --> Other Windows --> Document Outline
)気になるパネルを選択します。それを右クリックしてBring to Front
を他のすべての前に置きます。TabControl
の使用を検討するかもしれません。これは、設計時に視覚的に混乱させることができます。これは、ユーザーが表示しているパネルを手動で変更できるようにする場合にのみ妥当なソリューションです。UserControl
クラスに移動して、個別に操作することを検討してください。これらのパネルのコンテンツとロジックが合理的に自己完結型である場合は、コードをより適切に再構成するためだけにとにかくこれを行うことができます。補遺:TabControl
のタブをユーザーに表示しないようにするハックを使用することもできます。 TabControl
をフォームに配置し、実行時にItemSize
の高さを1に設定します。これにより、ユーザーが自分でタブを変更することは(ほとんど)不可能になりますが、デザイナーで表示されているタブを変更することはできます。
myTabControl.ItemSize = new Size(myTabControl.ItemSize.Width, 1);
理由のため、これをhackと呼んだことに注意してください。TabControl
sは、このように使用するためのものではありませんでした。それは機能しているように見えますが、すべてのハックと同様にいつでも壊れる可能性があるため、最後の手段としてのみ実行する必要があります(後で頭痛が発生する場合は私を責めないでください...)。要するに、私はしないでくださいこのハックをお勧めします。可能性として提供するだけです。
この種類のシナリオを管理するには、[フォーマット]> [順序]の[最前面へ移動]または[最背面へ移動]を使用しますが、そうです、可視性はランタイムのみ(AFAIK)です。
乾杯
これを行う正しい方法についてはわかりませんが、この場合私が自分で行うのはjystがコントロールを非常に小さくし、後でプログラムの実行時にサイズと場所を変更することです。
This.richTextBox1.Visible = falseを試してください。 Form1.cs内(デフォルトの名前「richTextBox1」でリッチテキストボックスを非表示にしようとしていると想定)
この状況で使用した1つのアプローチは、ドキュメントエクスプローラーウィンドウを使用して、作業中のパネルを前面に表示することです。
許容できる場合は、TabControl
コントロールの使用を検討し、Panel
コントロールをそれぞれ別のタブに配置してください。次に、タブを切り替えるか、プログラムで適切なタブを削除してコントロールに追加することで、正しいページを非表示にして表示できます。
また、レイアウトが異なる2つのウィンドウを使用して、ウィンドウ間の切り替えを示すこともできます。
数個以上のパネルを使用する場合は、それらを個別のコントロールに配置して、アプリケーションのフォーム内でコントロールを使用することを検討できます(つまり、必要に応じてプログラムで追加します)。このようにして、各コントロール(つまりPanel
の各コンテンツ)を個別に設計し、他のPanel
sを表示することができます。
これらの各提案により、いくつかのUI部分がさらに分離されます。これは、取得したレイアウトのそれぞれがアプリケーションの個別の部分に関連付けられている場合に望ましいことがあります。これらの提案を使用すると、管理にdeisgnerを使用するのがはるかに簡単になります。