DrawString绘制文本时出现残缺

l4angel 2006-10-19 10:59:40
学着用VS2005做一个简单的图片按钮控件~
在绘制文字时文字底部出现残缺现象、图片切换时出现抖动~
代码如下,请高人赐教!

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;

using System.Reflection;
using System.Resources;

namespace iWindowsControl
{
public partial class iWButton : UserControl
{
ResourceManager rm = new ResourceManager("iWindowsControl.Properties.Resources", typeof(Properties.Resources).Assembly);
Graphics DefaultGrp;

public iWButton()
{
InitializeComponent();
}

private string Text = "按钮";
[
Category("外观"),
Description("用于显示按钮上的文字.")
]

public string btnText
{
get
{
return Text;
}
set
{
Text = value;
Invalidate();
}
}

private void SetCaption(int x, int y, Graphics Grp)
{
StringFormat format = new StringFormat();
if (this.RightToLeft == RightToLeft.Yes)
{
format.FormatFlags |= StringFormatFlags.DirectionRightToLeft;
}
format.Alignment = StringAlignment.Center;
format.LineAlignment = StringAlignment.Center;

Font drawFont = new Font("宋体", 9);
SolidBrush drawBrush = new SolidBrush(Color.White);

Rectangle rectangle = new Rectangle(x, y, 92, 30);
Grp.DrawString(this.Text, drawFont, drawBrush, rectangle, format);
Grp.Dispose();
}

private void SetImage(int x, int y, Graphics Grp,string ImgName)
{
Image myPNG = (Image)rm.GetObject(ImgName);
Grp.Clear(this.BackColor);
Grp.DrawImage(myPNG, x, y, 92, 30);
SetCaption(x, y, Grp);
Grp.Dispose();
}

private void iWButton_Load(object sender, EventArgs e)
{
DefaultGrp = this.CreateGraphics();
SetImage(1, 1, DefaultGrp, "btnImg01");
}

private void iWButton_Paint(object sender, PaintEventArgs e)
{
DefaultGrp = e.Graphics;
SetImage(1, 1, DefaultGrp, "btnImg01");
}

private void iWButton_MouseEnter(object sender, EventArgs e)
{
DefaultGrp = this.CreateGraphics();
SetImage(1, 1, DefaultGrp, "btnImg02");
}

private void iWButton_MouseLeave(object sender, EventArgs e)
{
DefaultGrp = this.CreateGraphics();
SetImage(1, 1, DefaultGrp, "btnImg01");
}

private void iWButton_MouseDown(object sender, MouseEventArgs e)
{
DefaultGrp = this.CreateGraphics();
SetImage(2, 2, DefaultGrp, "btnImg02");
}

private void iWButton_MouseUp(object sender, MouseEventArgs e)
{
DefaultGrp = this.CreateGraphics();
SetImage(1, 1, DefaultGrp, "btnImg02");
}
}
}
...全文
278 1 打赏 收藏 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
楼主这个问题回答过

楼主换个方式看看,直接在Form_Paint中试试

...
e.Graphics.DrawString(this.Text, drawFont, drawBrush, rectangle, format);

4,818

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 图表区
社区管理员
  • 图表区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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