4

Visual Studio 2008フォームデザイナーでPSのレイヤーのように1つのパネルを非表示にするにはどうすればいいですか?それ以外の場合は、ユーザーがクリックしなければならない複数の「スクリーン」を設計するための別の優れた方法をお勧めしますか?複数のパネルを持つWindows.Formをデザインする - > PSレイヤーのように1つのパネルを非表示にする方法

答えて

2

最近のプロジェクトでthis Wizardコードを使用しましたが、うまくいきました。

これは基本的な経験を提供します。

17

何を説明するウィザードです、そしてあなたは私が私が私のUI内の同一空間に複数のパネルを持つようにしたいと私は切り替えたい場合がある場合、しかしEric J.

からのアプローチを調査する場合がありますデザイナーの間で、私はTabControlを使用して、TabControlのタブを隠すのが好きです。これにより、設計時にUIを管理しやすくなり、実行時にタブ間を切り替えるのがかなり簡単になります。

非常に簡単なHiddenTabsControlというTabControlから派生したカスタムコントロールを作成しました。クラスはWndProcをオーバーライドし、TabControl基本クラスで他のすべてを処理できるようにします。あなたがやらなければならないことは、次のとおりです。

  • 、カスタムコントロールを選択して、プロジェクトに
  • を新しい項目の追加名前それがHiddenTabsControlのようなもの。
  • 基本クラスをTabControlに変更し、Visual Studioが追加したコンストラクタとOnPaintオーバーライドを削除します。
  • コピークラスにWndProcメソッドのために、このオーバーライド:

protected override void WndProc(ref Message m) 
{ 
    // Hide tabs by trapping the TCM_ADJUSTRECT message 
    if (m.Msg == 0x1328 && !DesignMode) 
    { 
     m.Result = (IntPtr)1; 
    } 
    else 
    { 
     base.WndProc(ref m); 
    } 
} 
は今、あなたはデザイナーでタブを変更することができ、簡単にUIを設計し、コードの中であなたは、必要に応じてタブを変更するイベントを処理することができます。選択したタブを変更すると、簡単に行われます:タブを除去する

this.hiddenTabsControl.SelectedTab = this.tabPageYouWantVisible; 

1つの副作用は、コントロールが構築されたときにタブが占めるスペースです。それらを削除すると、HiddenTabsControlが占有する領域が縮小されて変更されます。私は通常、HiddenTabsControlのアンカーを一番下に収縮させないように設定しました。

+0

+1。これは素晴らしいシンプルな解決策です。 (あなたが右の焦点を置いている場合はCtrl + Tabキーは間違いなく動作し、矢印キー)のにあなたはまだ、キーボードでタブを切り替えることができます。 – Joey

+1

また、MultiLineプロパティを常に「true」に設定したい場合は、タブバーをスクロールする矢印が表示されますが、クリックすることはできません。 – Joey

+0

この方法は、モノと移植性がありません。私は以前このヒントを発見した – Luca

2

もう少しエレガントですばやくハックするアプローチは、ランタイムまでパネルを親フォームに追加しないことです。その際、デザイナーは、パネルがコンパイル前にどこに属しているのかわからず、表示されません。例えば

、あなたが親フォームにコントロールを追加コードのブロックを見つける:

   //this->Controls->Add(this->panel_X); 
     this->Controls->Add(this->tabControl); 
     this->Controls->Add(this->menuStrip_topMenu); 

コメントやフォームがロードされたときに発生するイベントへのハンドルを見つけ、その後、声明を削除します。

 this->Load += gcnew System::EventHandler(this, &MainForm::MainForm_Load); 

その後、イベントハンドラの定義では、フォームにコントロールを追加します。

System::Void MainForm_Load(System::Object^ sender, System::EventArgs^ e) { 
... 
... 
this->Controls->Add(this->panel_X); 
} 

は、私がこれを行うことにより、任意の望ましくない副作用を経験していないが、誰もがしないように十分な理由を持っている場合、私はそれを聞いてに興味があると思います。

関連する問題