更改其tabControls
tabPages
和表单的BackColor
时,每个BackColor
都有这些视觉故障,如下图所示:
tabPage
的顶部,有一个内部一像素的白色边框。 tabPage
的左侧,有一个内部三像素白色边框。 tabPage
的底部,有一个内部一像素白色边框和一个外部两像素白色边框。 tabPage
的右侧,有一个内部一像素白色边框和一个外部两像素白色边框。 有什么方法可以摆脱那些白色边框吗?
最佳答案
这是我尝试的骇客。我使用NativeWindow
绘制了TabControl
来填充那些“白色”空间。我不会声称这是完美的:
public class TabPadding : NativeWindow {
private const int WM_PAINT = 0xF;
private TabControl tabControl;
public TabPadding(TabControl tc) {
tabControl = tc;
tabControl.Selected += new TabControlEventHandler(tabControl_Selected);
AssignHandle(tc.Handle);
}
void tabControl_Selected(object sender, TabControlEventArgs e) {
tabControl.Invalidate();
}
protected override void WndProc(ref Message m) {
base.WndProc(ref m);
if (m.Msg == WM_PAINT) {
using (Graphics g = Graphics.FromHwnd(m.HWnd)) {
//Replace the outside white borders:
if (tabControl.Parent != null) {
g.SetClip(new Rectangle(0, 0, tabControl.Width - 2, tabControl.Height - 1), CombineMode.Exclude);
using (SolidBrush sb = new SolidBrush(tabControl.Parent.BackColor))
g.FillRectangle(sb, new Rectangle(0,
tabControl.ItemSize.Height + 2,
tabControl.Width,
tabControl.Height - (tabControl.ItemSize.Height + 2)));
}
//Replace the inside white borders:
if (tabControl.SelectedTab != null) {
g.ResetClip();
Rectangle r = tabControl.SelectedTab.Bounds;
g.SetClip(r, CombineMode.Exclude);
using (SolidBrush sb = new SolidBrush(tabControl.SelectedTab.BackColor))
g.FillRectangle(sb, new Rectangle(r.Left - 3,
r.Top - 1,
r.Width + 4,
r.Height + 3));
}
}
}
}
}
并将其连接起来:
public Form1() {
InitializeComponent();
var tab = new TabPadding(tabControl1);
}
我的最终结果:
关于c# - TabControl和边界视觉故障,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7768555/