当前位置: 代码迷 >> .NET组件控件 >> 自定义WinForm中的TextBox控件有关问题
  详细解决方案

自定义WinForm中的TextBox控件有关问题

热度:9901   发布时间:2013-02-25 00:00:00.0
自定义WinForm中的TextBox控件问题
小弟我自定义了一个简单的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)
{
  相关解决方案