1

タブ コントロールのタブ ページにメディア アイテムを表示するフォームがあり、ユーザーがタブ ページを独自のフォームに「ポップアウト」できる機能を実装しています。

ただし、TabPage ではなくフォームにメディア プレーヤーを追加すると、背景がタブ ページのグラデーション塗りつぶしから親フォームのプレーンな SystemColors.Control 背景に切り替わります。TabControl と同じ背景を持つが、上部にタブを表示しないコントロールにメディア プレーヤーを追加する必要があります。メディア プレーヤーを TabControl のコントロール コレクションに追加しようとしましたが、例外がスローされます。

タブのない TabControl のように見えるコントロールを取得するにはどうすればよいですか? メディア プレーヤーを TabControl に追加しようとし続ける必要がありますか、それともカスタム描画の背景を持つ Panel を作成しようとする必要がありますか? 後者の場合、考えられるすべてのテーマで機能することを確認するにはどうすればよいですか?

4

4 に答える 4

3

質問はUseVisbleBackgroundStyleに関するもののようです。AFAIKのみのボタンとTabPagesにこのプロパティがあります。

以下は、始めるための非常に汚いハックです。

1)PanelからcustomControlを派生させ、「usingSystem.Windows.Forms.VisualStyles;」を追加します。

2)次のコードを追加します

//warning: incomplete, add error checking etc
private readonly VisualStyleElement element = VisualStyleElement.Tab.Body.Normal;
public bool UseVisbleBackgroundStyle { get; set; }

protected override void OnPaint(PaintEventArgs pe)
{
    if (UseVisbleBackgroundStyle)
    {
        var x = new VisualStyleRenderer(element);                           
        x.DrawBackground(pe.Graphics, this.ClientRectangle);
    }
    else
    {
        base.OnPaint(pe);
    }
}
于 2009-02-20T10:35:49.123 に答える
3

Henk のおかげで、私は最終的に次のようにしました。

protected override void OnPaintBackground(PaintEventArgs e)
{
    if (TabRenderer.IsSupported && Application.RenderWithVisualStyles)
    {
        TabRenderer.DrawTabPage(pe.Graphics, this.ClientRectangle);
    }
    else
    {
        base.OnPaintBackground(pe);
        ControlPaint.DrawBorder3D(pe.Graphics, this.ClientRectangle, Border3DStyle.Raised);
    }
}
于 2009-02-20T11:27:59.590 に答える
0

独自の顧客 UserControl を作成してみる

于 2009-02-20T09:54:15.603 に答える