2

タイトルが紛らわしかったら申し訳ありません。このタイトルを最終的に考えるのに 5 分近くかかりました...

Visual Studio Express で をフォームに追加する方法をご存知ですか。TabControl右上の右矢印をクリックするTabControlと、新しい が追加されTabPageたり、削除されたりします。

さて、私はユーザーControlがパネルを切り替えることができるようにする必要があるユーザーを作成しています (私のユーザー コントロールは複数のパネルで構成されています)。Control過去にリボンを使用したことがあり、デザイナー ビューに新しいボタンなどを追加できるので、これが可能であることはわかっています。

誰かがこれを達成する方法について提案/アドバイスを提供できますか?

ありがとうございました

4

2 に答える 2

3

あなたの質問を正しく理解できれば、スマート タグについて話していることになります。

このプロセスは少し複雑なので、完全なサンプルを投稿するつもりはありません。代わりに、このテーマに関するチュートリアルを紹介します。簡単に言うと、カスタム デザイナーを作成し、1 つ以上のカスタム アクションを登録する必要があります。これを使用して、使用可能なパネルを一覧表示するコンボ ボックスを作成し、選択した項目が変更されたときにそれらを切り替えることができます。

(注 - 「スマート タグ」という用語には、Visual Studio では 2 つの異なる意味があります。具体的には、コード エディターのスマート タグではなく、ビジュアル デザイナーのスマート タグについて話しているのです)。

于 2010-02-19T00:16:02.513 に答える
0

から継承されたコントロールを作成するControl場合、 などのいくつかのプロパティを使用する必要がありIsDesignModeます。その後、特にデザイン モード内でイベント ハンドラーを構築できます。

if (IsDesignMode){
   // プロパティの変更など、デザイン モードでの対話性を処理します。
   // プロパティ ツールボックス
}

コントロールに のようなイベントがあるとしMouseClickます。これを行うことができます。

private void control_MouseClick(オブジェクト送信者, MouseEventArgs e){
   if (IsDesignMode){
       // Designer 内の Click イベントに応じて、ここで何かを行います
   }そうしないと{
       // これは実行時...
   }
}

私が考えることができるもう1つは、デザイナーが生成したコードにプロパティを永続化するために、「ShouldSerialize」に続いてパブリックにアクセス可能なプロパティです。たとえば、コントロールにブール値のプロパティがあるとします。Foo

public bool Foo{
    get{ return this._foo; }
    set{ if (this._foo != 値){
                this._foo = 値;
         }
       }
}

public bool ShouldSerializeFoo(){
    true を返します。// プロパティは、デザイナーが生成したコードに永続化されます
                 // Form.Designer.cs をチェックイン...
}

false が返された場合ShouldSerializeFoo、プロパティは永続化されません。true の場合はその逆で、Form.Designer.cs コード内に埋め込まれます...

これがお役に立てば幸いです。よろしくお願いします、トム。

于 2010-02-19T00:06:28.120 に答える