3 Stimmen

C# tabcontrol Grenze Kontrollen

Ist es möglich, einen Tabcontrol-Rahmen transparent zu machen oder die Farbe eines Tabcontrols festzulegen?

  • Winforms

7voto

silverfall Punkte 71

Falls jemand auf das gleiche Problem stößt, hier ist die Lösung, die bei mir funktioniert hat Umrandung TabControl

Wie sie beschrieben wird, Erstellen Sie ein NativeTabControl-Objekt und weisen Sie das Handle des tabControls zu, dessen Rand Sie entfernen möchten. Sie können diese NativeTabControl-Klasse als innere Klasse in der Formularklasse verwenden. Sie müssen nichts innerhalb der inneren Klasse ändern. Folgen Sie einfach den obigen Schritten. Die Lorbeeren sollten an den ursprünglichen Designer des Codes gehen. Ich stelle ihn hier nur für alle zur Verfügung, die auf das gleiche Problem stoßen und eine nette und sexy Antwort brauchen!

using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Windows.Forms;

public class Form1
{

public Form1()
{
    // This call is required by the Windows Form Designer.
    InitializeComponent();

    // Add any initialization after the InitializeComponent() call.
    this.NativeTabControl1 = new NativeTabControl();
    this.NativeTabControl2 = new NativeTabControl();
    this.NativeTabControl1.AssignHandle(this.TabControl1.Handle);
    this.NativeTabControl2.AssignHandle(this.TabControl2.Handle);
}

private NativeTabControl NativeTabControl1;

private NativeTabControl NativeTabControl2;
private class NativeTabControl : NativeWindow
{

    protected override void WndProc(ref Message m)
    {
        if ((m.Msg == TCM_ADJUSTRECT)) {
            RECT rc = (RECT)m.GetLParam(typeof(RECT));
            //Adjust these values to suit, dependant upon Appearance
            rc.Left -= 3;
            rc.Right += 3;
            rc.Top -= 3;
            rc.Bottom += 3;
            Marshal.StructureToPtr(rc, m.LParam, true);
        }
        base.WndProc(ref m);
    }

    private const Int32 TCM_FIRST = 0x1300;
    private const Int32 TCM_ADJUSTRECT = (TCM_FIRST + 40);
    private struct RECT
    {
        public Int32 Left;
        public Int32 Top;
        public Int32 Right;
        public Int32 Bottom;
    }

}

}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X