分享
 
 
 

实现了Format和NullText属性并且带按钮的文本框

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

///如未特别说明,本人所发表的技术文章都为原创, 任何人引用都请注明出处,并包含本声明

///作者: CSDN网名alias88,邮件:alias88@163.com,QQ:63343

using System;

using System.Collections;

using System.ComponentModel;

using System.Drawing;

using System.Data;

using System.Windows.Forms;

using System.Drawing.Drawing2D;

using System.ComponentModel.Design;

using System.Drawing.Design;

using System.Diagnostics;

namespace upSystem.upControls

{

/// <summary>

/// 实现了Format和NullText属性并且带按钮的文本框

/// </summary>

public class upButtonTextBox : System.Windows.Forms.TextBox

{

/// <summary>

/// 必需的设计器变量。

/// </summary>

private System.ComponentModel.Container components = null;

private Binding bd=null;

private TypeConverter typeConverter=null;

private IFormatProvider formatInfo=null;

private System.Reflection.MethodInfo parseMethod;

private string nullText="",format="";

private string _Format=string.Empty;

private Type dataType;

private System.Windows.Forms.Button _Button;

public event System.EventHandler CmdClick ;

public upButtonTextBox():base()

{

InitializeComponent();

this.DataBindings.CollectionChanged +=new CollectionChangeEventHandler(DataBindings_CollectionChanged);

}

/// <summary>

/// 清理所有正在使用的资源。

/// </summary>

protected override void Dispose( Boolean disposing )

{

if( disposing )

{

if(components != null)

{

components.Dispose();

}

}

base.Dispose( disposing );

}

#region 组件设计器生成的代码

/// <summary>

/// 设计器支持所需的方法 - 不要使用代码编辑器

/// 修改此方法的内容。

/// </summary>

private void InitializeComponent()

{

this._Button = new System.Windows.Forms.Button();

this.SuspendLayout();

//

// _Button

//

this._Button.BackColor = System.Drawing.Color.ForestGreen;

this._Button.Cursor = System.Windows.Forms.Cursors.Default;

this._Button.Dock = System.Windows.Forms.DockStyle.Right;

this._Button.Location = new System.Drawing.Point(76, 0);

this._Button.Name = "_Button";

this._Button.Size = new System.Drawing.Size(20, 17);

this._Button.TabIndex = 0;

this._Button.Text = ">";

this._Button.Visible = false;

this._Button.Click += new System.EventHandler(this.btnCommand_Click);

//

// upButtonTextBox

//

this.Controls.Add(this._Button);

this.ResumeLayout(false);

}

#endregion

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

private void DataBindings_CollectionChanged(object sender, CollectionChangeEventArgs e)

{

try

{

dataType=null;

if (bd!=null)

{

bd.Parse -= new ConvertEventHandler(bd_Parse);

bd.Format -= new ConvertEventHandler(bd_Format);

}

bd= DataBindings["Text"];

if (bd!=null)

{

bd.Parse += new ConvertEventHandler(bd_Parse);

bd.Format += new ConvertEventHandler(bd_Format);

if (bd.BindingManagerBase !=null)

DataType=bd.BindingManagerBase.GetItemProperties()[bd.BindingMemberInfo.BindingField ].PropertyType;

}

}

catch{throw;}

}

[

Category("格式"),

Editor(typeof(upTypeSelectEditor), typeof(UITypeEditor)),

DefaultValue(typeof (System.String)),

Description("文本框的数据类型")

]

public Type DataType

{

get{return dataType;}

set

{

dataType=value;

if (dataType!=null && dataType != typeof(object))

{

this.typeConverter = TypeDescriptor.GetConverter(dataType);

Type[] typeArray1 = new Type[2] { typeof(string), typeof(IFormatProvider) } ;

this.parseMethod = dataType.GetMethod("Parse", typeArray1);

}

}

}

[

Category("格式"),

DefaultValue("无"),

Description("值为Null要显示的值")

]

public string NullText

{

get{return nullText;}

set{nullText=value; }

}

[

Category("格式"),

Editor(typeof(upFormatEditor), typeof(UITypeEditor)),

DefaultValue(String.Empty),

Description("格式字符串")

]

public string Format

{

get

{

return _Format;

}

set

{

if (value == null)

{

value = string.Empty;

}

if ((_Format == null) || !_Format.Equals(value))

{

_Format = value;

if (((_Format.Length == 0) && (this.typeConverter != null))

&& !this.typeConverter.CanConvertFrom(typeof(string)))

{

this.ReadOnly = true;

}

this.Invalidate();

}

}

}

[Browsable(false), EditorBrowsable(EditorBrowsableState.Advanced)]

public IFormatProvider FormatInfo

{

get

{

return this.formatInfo;

}

set

{

if ((this.formatInfo == null) || !this.formatInfo.Equals(value))

{

this.formatInfo = value;

}

}

}

private void bd_Format(object sender, ConvertEventArgs e)

{

try

{

if (!bd.IsBinding ) return ;

e.Value =FormatValue(e.Value );

}

catch (System.Exception ex )

{

upApp.HaveErr((Control)sender,new Exception ( "数据类型不合格\n",ex),1);

}

}

private void bd_Parse(object sender, ConvertEventArgs e)

{

try

{

if (!bd.IsBinding ) return ;

e.Value =ParseValue ( e.Value );

}

catch ( System.Exception ex)

{

upApp.HaveErr((Control)sender,new Exception ( "数据类型不合格\n",ex),1);

}

}

/// <summary>

/// 将文本框要显示的值格式化

/// </summary>

/// <param name="value"></param>

/// <returns></returns>

private string FormatValue(object value)

{

if (value is DBNull || value ==null)

{

return this.NullText;

}

try

{

if (((this.format != null) && (this.format.Length != 0)) && (value is IFormattable))

{

return ((IFormattable) value).ToString(this.format, this.formatInfo);

}

else if ((this.typeConverter != null) && this.typeConverter.CanConvertTo(typeof(string)))

{

return ((string) this.typeConverter.ConvertTo(value, typeof(string)));

}

throw new Exception ();

}

catch

{

if (value == null) return string.Empty;

return value.ToString();

}

}

/// <summary>

/// 将文本框格式化后的值还原可接受的值

/// </summary>

/// <param name="value"></param>

/// <returns></returns>

private object ParseValue(object value)

{

try

{

if (this.NullText.Equals(value))

{

return Convert.DBNull;

}

else if (((this.format != null) && (this.format.Length != 0)) && (this.parseMethod != null) && (this.FormatInfo != null))

{

object[] objArray1 = new object[2] { value, this.FormatInfo } ;

return this.parseMethod.Invoke(null, objArray1);

}

else if ((this.typeConverter != null) && this.typeConverter.CanConvertFrom(typeof(string)))

{

return this.typeConverter.ConvertFrom (value);

}

throw new Exception ();

}

catch (Exception)

{

return Convert.DBNull ;

}

}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

/// <summary>

/// 内嵌的按钮

/// </summary>

public Button Button

{

get{return _Button;}

}

/// <summary>

/// 是否显示按钮

/// </summary>

public System.Boolean ShowButton

{

get{return this.Button.Visible ;}

set{Button.Visible=value;}

}

private void btnCommand_Click(object Sender, System.EventArgs e)

{

OnCmdClick (this,e);

}

protected void OnCmdClick (object Sender,System.EventArgs e )

{

if (CmdClick!=null) CmdClick(Sender,e);

}

protected override void OnBorderStyleChanged(EventArgs e)

{

base.OnBorderStyleChanged (e);

switch (this.BorderStyle)

{

case BorderStyle.Fixed3D:

this.Button.FlatStyle=FlatStyle.Standard ;

break;

case BorderStyle.FixedSingle :

this.Button.FlatStyle=FlatStyle.Popup ;

break;

case BorderStyle.None :

this.Button.FlatStyle=FlatStyle.Flat ;

break;

}

}

private void upTextBox_Enter(object Sender, System.EventArgs e)

{

if (ShowButton && Button.Visible ==false )

{

Button.Visible =true;

}

}

private void upTextBox_Leave(object Sender, System.EventArgs e)

{

if (Button.Visible )

{

Button.Visible =false;

}

}

}

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有