小弟我自定义了一个简单的TextBox控件,在开始显示的时候还可以,但是这个自定义的TextBox控件在获得焦点以后,他的字体样式就改变了,不知道这是什么原因!以下自定义的代码:
using System;
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Data;
using System.Windows.Forms;
namespace MyUserControl
{
/// <summary>
/// WinButton 的摘要说明。
/// </summary>
public class MyTextBox : System.Windows.Forms.TextBox
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.Container components = null;
public MyTextBox()
{
SetStyle(ControlStyles.UserPaint,true);
// 该调用是 Windows.Forms 窗体设计器所必需的。
InitializeComponent();
}
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if( components != null )
components.Dispose();
}
base.Dispose( disposing );
}
#region 组件设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器
/// 修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
}
#endregion
protected override void OnPaint(PaintEventArgs pe)
{
base.OnPaint(pe);
pe.Graphics.FillRectangle(new SolidBrush(Parent.BackColor),
pe.ClipRectangle);
DrawBorder(pe.Graphics,1);
PaintBack(pe.Graphics,SystemColors.ControlLightLight);
WriteText(pe.Graphics);
}
private void PaintBack(Graphics g,Color c)
{
g.FillRectangle(new SolidBrush(c),3,3,
Width-6,Height-6);
}
private void DrawBorder(Graphics g,int state)
{
int arc=3;
Pen p = new Pen(SystemColors.ControlLightLight,2);
g.DrawLine(p,1,1,1,Height-2);
g.DrawLine(p,1,1,Width-2,1);
g.DrawLine(p,Width-1,2,Width-1,Height-2);
g.DrawLine(p,2,Height-1,Width-2,Height-1);
Pen pen=new Pen(Color.LightSlateGray,1);
g.DrawLine(pen,0,2,0,Height-arc);
g.DrawLine(pen,2,0,Width-arc,0);
g.DrawLine(pen,Width-1,2,Width-1,Height-arc);
g.DrawLine(pen,2,Height-1,Width-arc,Height-1);
g.DrawLine(pen,0,2,2,0);
g.DrawLine(pen,0,Height-arc,2,Height-1);
g.DrawLine(pen,Width-arc,0,Width-1,2);
g.DrawLine(pen,Width-arc,Height-1,
Width-1,Height-arc);
}
private void WriteText(Graphics g)
{
int x=0,y=0;
Brush r=new SolidBrush(this.ForeColor);
Size s = g.MeasureString(Text,Font).ToSize();
y=(Height-s.Height)/2;
g.DrawString(Text,Font,r,x,y);
}
}
}
------解决方案--------------------------------------------------------
在TextBox的字符区不好实现自定义操作,不过对它的其它部分是可以的.比如如下的代码可以给它添加一个红色的边框:
public class MyTextBox : TextBox
{
public MyTextBox()
{
this.BorderStyle = BorderStyle.FixedSingle;
}
protected override void WndProc(ref Message m)
{