tabcontrol重绘的问题

UndefinedCC 2012-03-20 07:34:41
using System.Drawing;
using System.Windows.Forms;

public class Form1 : Form
{
private Rectangle tabArea;
private RectangleF tabTextArea;

public Form1()
{
TabControl tabControl1 = new TabControl();
TabPage tabPage1 = new TabPage();

// Allows access to the DrawItem event.
tabControl1.DrawMode = TabDrawMode.OwnerDrawFixed;

tabControl1.SizeMode = TabSizeMode.Fixed;
tabControl1.Controls.Add(tabPage1);
tabControl1.ItemSize = new Size(80, 30);
tabControl1.Location = new Point(25, 25);
tabControl1.Size = new Size(250, 250);
tabPage1.TabIndex = 0;
ClientSize = new Size(300, 300);
Controls.Add(tabControl1);
TabPage tabPage2 = new TabPage();
tabControl1.Controls.Add(tabPage2);
tabPage2.TabIndex = 1;

tabArea = tabControl1.GetTabRect(0);
tabTextArea = (RectangleF)tabControl1.GetTabRect(0);


tabControl1.DrawItem += new DrawItemEventHandler(DrawOnTab);
}

private void DrawOnTab(object sender, DrawItemEventArgs e)
{
MessageBox.Show(e.Index.ToString());
Graphics g = e.Graphics;
Pen p = new Pen(Color.Red);
Font font = new Font("Arial", 10.0f);
SolidBrush brush = new SolidBrush(Color.Red);

g.DrawRectangle(p, tabArea);
g.DrawString("tabPage1", font, brush, tabTextArea);
}

static void Main()
{
Application.Run(new Form1());
}

private void InitializeComponent()
{
this.SuspendLayout();

this.ClientSize = new System.Drawing.Size(292, 273);
this.Name = "Form1";
this.Load += new System.EventHandler(this.Form1_Load);
this.ResumeLayout(false);

}

private void Form1_Load(object sender, System.EventArgs e)
{

}
}
我想重绘tabcontrol,但是只有第一个tab得到了重绘,
...全文
272 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
UndefinedCC 2012-03-21
  • 打赏
  • 举报
回复
谢谢啦 以后复制代码得小心点了
kkgoose 2012-03-20
  • 打赏
  • 举报
回复
因为你的重绘范围始终是第一个tabpage,所以。。。
tabArea = tabControl1.GetTabRect(0);
tabTextArea = (RectangleF)tabControl1.GetTabRect(0);

//DrawOnTab改成这样就可以了
private void DrawOnTab(object sender, DrawItemEventArgs e)
{
Graphics g = e.Graphics;
Pen p = new Pen(Color.Red);
Font font = new Font("Arial", 10.0f);
SolidBrush brush = new SolidBrush(Color.Red);

for (int i = 0; i < tabControl1.TabPages.Count; i++)
{
tabArea = tabControl1.GetTabRect(i);
tabTextArea = (RectangleF)tabControl1.GetTabRect(i);
g.DrawRectangle(p, tabArea);
g.DrawString("tabPage"+(i+1).ToString(),font,brush,tabTextArea);

}

}

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧