我有两个窗体。第一个是名为 main 的 mdiParent 形式。第二个是演示表单,它是主表单的子表单。演示表单具有选项卡式布局。演示表单有一个首选项按钮。当我单击首选项按钮时,会打开一个新表单(“首选项”),要求单击设置颜色按钮。单击该按钮会打开一个对话框结果以更改颜色。当我选择一种颜色时,首选项背景色会发生变化。但 dows 不会更改选项卡式布局('presentation form')背景色。我在 n 层架构中构建这个应用程序。所以帮助我如何更改选项卡的背景色。如果您不理解我的问题,我将上传代码。
问问题
180 次
2 回答
0
TabControl 没有公开 BackColor 属性,因为它们通常基于当前窗口系统主题进行绘制。
这通常不值得努力,但 TabControl 确实有一个 DrawMode 属性,您可以在 DrawItem 事件中自己绘制选项卡。
每个单独的 TabPage 控件都有一个可用的 BackColor 属性。
于 2013-04-09T21:26:18.973 回答
0
这是我的自定义事件处理程序,我必须创建一个围绕文本的彩色框。选定的选项卡是一种颜色,未选择的是另一种颜色...
private void ChangeTabColor(Object sender, DrawItemEventArgs e)
{
Font TabFont;
Brush BackBrush;// = new SolidBrush(Color.Green); //Set background color
Brush ForeBrush = new SolidBrush(Color.Black);//Set foreground color
Brush borderBrush = new SolidBrush(Color.Black);//Set foreground color
if (e.Index == this.tabMain.SelectedIndex)
{
TabFont = new Font(e.Font, FontStyle.Bold);
BackBrush = new SolidBrush(Color.MediumSeaGreen); //Set background color
//ForeBrush = new SolidBrush(Color.Black);//Set foreground color
}
else
{
TabFont = e.Font;
BackBrush = new SolidBrush(Color.LightSteelBlue); //Set background color
//ForeBrush = new SolidBrush(Color.Yellow);//Set foreground color
}
string TabName = this.tabMain.TabPages[e.Index].Text;
StringFormat sf = new StringFormat();
sf.Alignment = StringAlignment.Center;
Rectangle r = e.Bounds;
r = new Rectangle(r.X, r.Y + 5, r.Width, r.Height - 3);
if (e.Index == this.tabMain.SelectedIndex)
{
Pen rectPen = new Pen(borderBrush, 1.0f);
r.Y -= 2;
r.X += 3;
r.Height -= 9;
r.Width -= 8;
e.Graphics.FillRectangle(BackBrush, r);
e.Graphics.DrawString(TabName, TabFont, ForeBrush, r, sf);
e.Graphics.DrawRectangle(rectPen, r);
}
else
{
Pen rectPen = new Pen(borderBrush, 1.0f);
r.Y -= 2;
r.Height -= 4;
r.Width -= 2;
e.Graphics.FillRectangle(BackBrush, r);
e.Graphics.DrawString(TabName, TabFont, ForeBrush, r, sf);
e.Graphics.DrawRectangle(rectPen, r);
}
//Dispose objects
sf.Dispose();
if (e.Index == this.tabMain.SelectedIndex)
{
TabFont.Dispose();
BackBrush.Dispose();
}
else
{
BackBrush.Dispose();
ForeBrush.Dispose();
}
}
当然“tabMain”是指选项卡控件名称。我希望这对你想要做的事情有所帮助......可能有点花哨,但代码并不难,而且我认为它看起来更干净......加上为了做到这一点,我确保设置字体和项目大小的适当属性:
字体 = Arial,9pt,样式 = 粗体
ItemSize = 95, 25 ...高度是重要的部分,只要你设置SizeMode = Normal
于 2013-04-09T21:44:02.263 回答