2012-04-04 7 views
2

Die Registerkarten haben eine Auffüllung zwischen dem Rahmen und den Innensteuerelementen. Gibt es eine Möglichkeit, diese Polsterung zu entfernen?C# Entfernen von Padding aus TabPages in Windows Forms

Dies ist notwendig, da das TabControl schlecht aussieht, wenn es im übergeordneten Container angedockt ist.

Ich habe versucht, eine Methode überschreiben noch, aber es hat nicht funktioniert.

+0

möglich Duplikat [? Wie kann ich die Grenze padding auf Container-Steuerelemente in WinForms entfernen] (http://stackoverflow.com/questions/4968267/how-can-i-remove-the-border-padding-auf-container-controls-in-winforms) –

+0

Ich bin mir nicht sicher über die Auffüllung, aber Sie können nicht den äußeren Hintergrund/Rahmen der Tabcontrol gleich machen als der übergeordnete Container, so dass es sich einfügt. (dh Rand = keine) – Kyra

+0

@JustinPihony Ich versuchte den Code in "dieser Antwort" Verbindung und es gab mir einen win2k Art TabControl. Mit "Explorer" als Parameter gab es überhaupt keine Änderungen. Kyra: TabControl hat keine Border-Eigenschaft und der Border of TabPage ist standardmäßig auf None gesetzt. – bytecode77

Antwort

5

fand ich es kann mit WndProc erreicht werden aus:

public class TabControl2 : TabControl 
{ 
    protected override void WndProc(ref Message m) 
    { 
     if (m.Msg == 0x1300 + 40) 
     { 
      RECT rc = (RECT)m.GetLParam(typeof(RECT)); 
      rc.Left -= 7; 
      rc.Right += 7; 
      rc.Top -= 2; 
      rc.Bottom += 7; 
      Marshal.StructureToPtr(rc, m.LParam, true); 
     } 
     base.WndProc(ref m); 
    } 
} 

public struct RECT 
{ 
    public int Left, Top, Right, Bottom; 
} 
+0

Dies ging in die richtige Richtung, entfernte aber die Grenze. Weiter oben gab es noch eine weiße Polsterung. Dies ergab die saubersten Ergebnisse für mich: http://StackOverflow.com/a/7785745/920511 – Knickedi