整合TextBox与Label 创建新控件--EFLabelText

    程序开发中,经常用到一个Label 和一个TextBox组合显示数据信息,为此要频繁的拉两个控件再做适当调整,为减少类似“傻瓜”作业,而写了这个新控件--EFLabelText,其就是组合Label和TextBox,程序员只要拉一次即可实现原来之较为繁琐的动作。没有技术难点,仅是繁琐点。以下贴出全部代码,稍作修改编译即可使用。(在VS2005 2.0下编译通过,可正常使用之)
ContractedBlock.gif ExpandedBlockStart.gif Code
  1 using System;
  2 using System.Collections.Generic;
  3 using System.ComponentModel;
  4 using System.Drawing;
  5 using System.Data;
  6 using System.Text;
  7 using System.Windows.Forms;
  8 using System.Web.UI.Design.WebControls;
  9 using System.Drawing.Design;
 10 
 11 namespace EF
 12 {
 13     public partial class EFLabelText : UserControl
 14     {      
 15         // Fields                         
 16         private ValueType item_type;       
 17         private ArrangeMode m_nArrange; 
 18         private bool m_bArrangeChanging;
 19         private bool m_bDynamicSize;
 20         private string item_ename;
 21         private int m_nLabelHorizontalLength;
 22         private int m_nTextBoxHorizontalLength;
 23 
 24         // Events
 25         [Category("EF事件"),Description("对回车进行处理")]
 26         public event EFEnterPressEventHandler DoEnterPress;
 27 
 28         [Category("EF事件"),Description("当用户输入不匹配当前定义的正则表达式时触发")]
 29         public event EventHandler EFTextInvalid
 30         {
 31             add
 32             {
 33                 this.efTextBox1.EFTextInvalid += value;
 34             }
 35             remove
 36             {
 37                 this.efTextBox1.EFTextInvalid -= value;
 38             }
 39         }
 40 
 41         // Methods
 42         public EFLabelText()
 43         {      
 44             this.m_bDynamicSize = false;
 45             this.m_bArrangeChanging = false;  
 46             this.InitializeComponent();          
 47             this.efLabel1.in_labeltext = true;
 48             this.m_nArrange = ArrangeMode.horizontal;
 49             this.item_type = ValueType.EFString;
 50             base.SetStyle(ControlStyles.SupportsTransparentBackColor, true);
 51             this.efTextBox1.DoEnterPress += new EFTextBox.EFEnterPressEventHandler(this.OnDoEnterPress);
 52             this.BackColor = Color.Transparent;
 53         }
 54 
 55         public EFLabelText(bool DynamicSize)
 56         {       
 57             this.m_bDynamicSize = DynamicSize;
 58             this.m_bArrangeChanging = false;
 59             this.InitializeComponent();
 60             this.efLabel1.in_labeltext = true;
 61             this.m_nArrange = ArrangeMode.horizontal;
 62             this.item_type = ValueType.EFString;
 63             base.SetStyle(ControlStyles.SupportsTransparentBackColor, true);
 64             this.BackColor = Color.Transparent;
 65         }
 66 
 67         private void ArrangeChange()
 68         {
 69             if (this.m_nArrange == ArrangeMode.horizontal)
 70             {
 71                 this.efLabel1.Top = 0;
 72                 this.efLabel1.Left = 0;
 73                 this.efTextBox1.Top = 0;
 74                 base.Height = this.efTextBox1.Height;
 75                 if (this.m_bArrangeChanging)
 76                 {
 77                     this.efLabel1.Width = this.m_nLabelHorizontalLength;
 78                     this.efLabel1.Height = this.efTextBox1.Height;
 79                     this.efTextBox1.Left = this.m_nLabelHorizontalLength + 1;
 80                 }
 81                 else
 82                 {
 83                     this.efTextBox1.Width = (base.Width - this.efLabel1.Width) - 2;
 84                     this.efTextBox1.Left = this.efLabel1.Width + 1;
 85                 }
 86             }
 87             else
 88             {
 89                 this.efLabel1.Left = 0;
 90                 this.efLabel1.Top = 0;
 91                 this.efTextBox1.Left = 0;
 92                 if (this.m_bArrangeChanging)
 93                 {
 94                     base.Width = (this.efLabel1.Width > this.efTextBox1.Width) ? this.efLabel1.Width : this.efTextBox1.Width;
 95                     base.Height = (this.efLabel1.Height + this.efTextBox1.Height) + 2;
 96                 }
 97                 else
 98                 {
 99                     this.efLabel1.Height = (base.Height - this.efTextBox1.Height) - 2;
100                     this.efTextBox1.Top = this.efLabel1.Height + 2;
101                 }
102                 this.efLabel1.Width = base.Width;
103                 this.efTextBox1.Width = base.Width;
104             }
105             this.m_bArrangeChanging = false;
106         }       
107 
108         private void EFLabelText_Load(object sender, EventArgs e)
109         {
110             if (this.EFCname == null)
111             {
112                 this.EFCname = base.Name;
113             }
114         }
115 
116         private void EFLabelText_SizeChanged(object sender, EventArgs e)
117         {
118             this.ArrangeChange();
119         }
120 
121         public bool EFSetFocus()
122         {
123             return this.efTextBox1.Focus();
124         }
125 
126         private void efTextBox1_EFTextInvalid(object sender, EventArgs e)
127         {
128             this.errorProvider1.SetError(this"格式输入错误,格式符为" + this.EFLeaveExpression + "!");
129         }
130 
131         private void efTextBox1_KeyPress(object sender, KeyPressEventArgs e)
132         {
133             int keyChar = e.KeyChar;
134             if (this.item_type != ValueType.EFString)
135             {
136                 if (this.item_type == ValueType.EFDecimal)
137                 {
138                 }
139                 if (((keyChar < 0x30|| (keyChar > 0x39)) && ((keyChar != 0x2e&& (keyChar != 8)))
140                 {
141                     e.Handled = true;
142                 }
143             }
144         }
145 
146         private void efTextBox1_TextChanged(object sender, EventArgs e)
147         {
148             this.errorProvider1.SetError(this"");
149         }
150 
151         public Size getSize()
152         {
153             if (this.m_nArrange == ArrangeMode.horizontal)
154             {
155                 return new Size((this.efTextBox1.Size.Width + this.efLabel1.Size.Width) + 2base.Height);
156             }
157             return new Size(base.Width, this.efTextBox1.Size.Height + this.efLabel1.Size.Height);
158         }       
159 
160         protected virtual void OnDoEnterPress(object sender, EventArgs e)
161         {
162             if (this.DoEnterPress != null)
163             {
164                 this.DoEnterPress(this, e);
165             }
166         }
167 
168         protected override void OnPaint(PaintEventArgs e)
169         {
170             Graphics graphics = e.Graphics;
171             SizeF ef = graphics.MeasureString(this.efLabel1.Text, this.Font);
172             this.m_nLabelHorizontalLength = Convert.ToInt32(ef.Width) + 4;
173             ef = graphics.MeasureString(this.efTextBox1.Text, this.Font);
174             this.m_nTextBoxHorizontalLength = Convert.ToInt32(ef.Width);
175             if (this.m_bDynamicSize)
176             {
177                 this.efTextBox1.Width = (this.m_nTextBoxHorizontalLength < 40? 40 : this.m_nTextBoxHorizontalLength;
178                 base.Width = (this.efTextBox1.Width + this.efLabel1.Width) + 2;
179             }
180             if (this.m_nArrange == ArrangeMode.horizontal)
181             {
182                 this.efLabel1.Width = this.m_nLabelHorizontalLength;
183             }
184             this.ArrangeChange();
185         }
186 
187         public override void Refresh()
188         {
189             base.Refresh();
190         }
191 
192         // Properties
193         [Category("EF属性"), Description("组成方式")]
194         public ArrangeMode EFArrange
195         {
196             get
197             {
198                 return this.m_nArrange;
199             }
200             set
201             {
202                 this.m_nArrange = value;
203                 this.m_bArrangeChanging = true;
204                 this.Refresh();
205             }
206         }
207 
208         [Category("EF属性"), Description("中文")]
209         public string EFCname
210         {
211             get
212             {
213                 return this.efLabel1.Text;
214             }
215             set
216             {
217                 this.efLabel1.Text = value;
218                 this.Refresh();
219             }
220         }
221 
222         [Category("EF属性"),Description("英文")]
223         public string EFEname
224         {
225             get
226             {
227                 return this.item_ename;
228             }
229             set
230             {
231                 this.item_ename = value;
232             }
233         }
234 
235         [Category("EF属性"),Description("输入文字")]
236         public string EFEnterText
237         {
238             get
239             {
240                 return this.efTextBox1.Text;
241             }
242             set
243             {
244                 this.efTextBox1.Text = value;
245             }
246         }
247 
248         [ Category("EF属性"),Description("获得标签引用")]
249         public EFLabel EFLabelRef
250         {
251             get
252             {
253                 return this.efLabel1;
254             }
255         }
256 
257         [Category("EF属性"), Description("上一次正确的值")]
258         public string EFLastValidValue
259         {
260             get
261             {
262                 return this.efTextBox1.EFLastValidValue;
263             }
264         }
265 
266         [Category("EF属性"), Editor(typeof(RegexTypeEditor), typeof(UITypeEditor)), Description("焦点离开文本框时进行匹配检查的正则表达式")]
267         public string EFLeaveExpression
268         {
269             get
270             {
271                 return this.efTextBox1.EFLeaveExpression;
272             }
273             set
274             {
275                 this.efTextBox1.EFLeaveExpression = value;
276             }
277         }
278 
279         [Category("EF属性"),Description("长度")]
280         public int EFLen
281         {
282             get
283             {
284                 if (this.item_type == ValueType.EFDecimal)
285                 {
286                     return this.efTextBox1.MaxLength;
287                 }
288                 return this.efTextBox1.MaxLength;
289             }
290             set
291             {
292                 int num;
293                 if (value <= 0)
294                 {
295                     num = 1;
296                 }
297                 else
298                 {
299                     num = value;
300                 }
301                 if (this.item_type == ValueType.EFDecimal)
302                 {
303                     this.efTextBox1.MaxLength = num;
304                 }
305                 else
306                 {
307                     this.efTextBox1.MaxLength = num;
308                 }
309             }
310         }
311 
312         [Category("EF属性"), Description("获得文本引用")]
313         public EFTextBox EFTextRef
314         {
315             get
316             {
317                 return this.efTextBox1;
318             }
319         }
320 
321         [Category("EF属性"), Description("类型")]
322         public ValueType EFType
323         {
324             get
325             {
326                 return this.item_type;
327             }
328             set
329             {
330                 this.item_type = value;
331                 if (value == ValueType.EFDateTime)
332                 {
333                     this.EFLen = 14;
334                 }
335             }
336         }
337 
338         [Category("EF属性"), Description("大写字母")]
339         public bool EFUpperCase
340         {
341             get
342             {
343                 return (this.efTextBox1.CharacterCasing == CharacterCasing.Upper);
344             }
345             set
346             {
347                 if (value)
348                 {
349                     this.efTextBox1.CharacterCasing = CharacterCasing.Upper;
350                 }
351                 else
352                 {
353                     this.efTextBox1.CharacterCasing = CharacterCasing.Normal;
354                 }
355             }
356         }
357 
358         // Nested Types
359         public delegate void EFEnterPressEventHandler(object sender, EventArgs e);
360     }
361 }
362 

转载于:https://www.cnblogs.com/jiangshaofen/archive/2009/10/10/1580405.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值