如果你想让鼠标移到按钮上更改背景颜色,移出后恢复,一般用以下代码,那能不能把他写成自定义控件呢?
<asp:Button ID="Button1" runat="server" onmouseover="this.style.backgroundColor='DodgerBlue';this.style.color='black';"
onmouseout="this.style.backgroundColor='Silver';this.style.color='black';" Text="Button" BackColor="Silver" BorderWidth="1px" Height="21px" />
现在我们就开始吧:
1、建立项目ButtonColor,选择Web控件库
2、删除默认的文件WebCustomControl1.cs,选择项目ButtonColor右键->添加-新建项,在弹出以下的窗口里选择Web自定义控件,名字为ButtonColor
3、找到类ButtonColor.cs中的代码public class ButtonColor : WebControl一行,替换为:public class ButtonColor : System.Web.UI.WebControls.Button
4、删除public class ButtonColor : System.Web.UI.WebControls.Button一行下面大括号所包含的全部有代码,而替换为以下代码
protected override void Render(HtmlTextWriter output)
{
//设定按钮默认属性
base.Text = "Button";
base.BorderWidth = 1;
base.Height = 21;
base.Width = 57;
base.BackColor = System.Drawing.Color.Silver;
//获得用户设置的按钮颜色
base.Attributes.Add("onmouseover", "this.style.backgroundColor='DodgerBlue';this.style.color='black';");
base.Attributes.Add("onmouseout", "this.style.backgroundColor='Silver';this.style.color='black';");
base.Render(output);
}
5、选择项目ButtonColor右键->生成,如果没有发现错误,则一个控件就做完了
6、新建立一个网站TestButtonColor,把生成的控件添加到工具箱里,方法是在工具箱的常规选项卡里点右键->选择项(见下图)
7、在弹出的对话框里,点“浏览”找到你刚才创建的控件ButtonColor.dll
确定后,控件就加如到工具箱里了
8、拖放两个控件ButtonColor到网页里运行,效果如下,当鼠标放到控件上时,自动更改颜色
9、下面我们增加两个属性来改变鼠标放到按钮上的颜色,和鼠标移开按钮的颜色。首先打开刚才建立的项目ButtonColor
10、选择项目ButtonColor下的引用,点右键->添加引用->选择System.Windows.Forms->确定(原因是,属性里加个帮助对话框)
11、倒入命名空间using System.Drawing;删除ButtonColor.cs里Render方法及其代码,替换为以下代码
private Color _MouseOverBgColor = Color.DodgerBlue;
private Color _MouseOutBgColor = Color.Silver;
/// </summary>
/// 设置鼠标在按钮上时,背景的颜色。
/// </summary>
[Browsable(true),
Category("Appearance"),
Description("设置鼠标在按钮上时,按钮背景的颜色.延边职大(中国.延吉)")]
public Color MouseOverBgColor
{
get
{
return this._MouseOverBgColor;
}
set
{
this._MouseOverBgColor = value;
}
}
/// <summary>
/// 设置鼠标移出后,按钮背景颜色。
/// </summary>
[Browsable(true),
Category("Appearance"),
Description("设置鼠标移出按钮后,按钮背景颜色.延边职大(中国.延吉)")]
public Color MouseOutBgColor
{
get
{
return this._MouseOutBgColor;
}
set
{
this._MouseOutBgColor = value;
}
}
/// <summary>
/// 将颜色转换为带“#”前缀的字符串(不是颜色名)
/// </summary>
/// <param name="color">颜色</param>
/// <returns>带#前缀的字符串</returns>
private string ColorToString(Color color)
{
return "#" + color.R.ToString("x").PadLeft(2, '0') +
color.G.ToString("x").PadLeft(2, '0') + color.B.ToString("x").PadLeft(2, '0');
}
/// <summary>
/// 将字符串(#RRGGBB)转换为GDI+颜色(此处没用到,但很多人问,还是写上了)
/// </summary>
/// <param name="str">要转换的字符串</param>
/// <returns>GDI+颜色</returns>
private Color ColorFromString(string str)
{
return ColorTranslator.FromHtml(str);
}
/// <summary>
/// 指定控件的帮助信息
/// </summary>
private string _help = "帮助";
[CategoryAttribute("自定义编辑器"),
DefaultValueAttribute("1.0"),
DescriptionAttribute("获得控件主要属性的帮助。延边职大(中国.延吉)"),
ReadOnlyAttribute(true),
EditorAttribute(typeof(AppVerConverter), typeof(System.Drawing.Design.UITypeEditor))]
public string Help
{
get { return this._help; }
set { this._help = value; }
}
/// <summary>
/// 自定义UI的属性编辑器(弹出消息)
/// </summary>
public class AppVerConverter : System.Drawing.Design.UITypeEditor
{
/// <summary>
/// 覆盖此方法以返回编辑器的类型。
/// </summary>
public override System.Drawing.Design.UITypeEditorEditStyle GetEditStyle(System.ComponentModel.ITypeDescriptorContext context)
{
return System.Drawing.Design.UITypeEditorEditStyle.Modal;
}
/// <summary>
/// 覆盖此方法以显示版本信息,Button控件,版本V1.0
/// </summary>
public override object EditValue(System.ComponentModel.ITypeDescriptorContext context, System.IServiceProvider provider, object value)
{
string help = " 改变按钮背景颜色帮助信息 ";
help += "主要属性: ";
help += "MouseOverBgColor属性:设置鼠标在按钮上时,按钮背景的颜色。 ";
help += "MouseOutBgColor属性:设置鼠标移出按钮后,按钮背景颜色。 ";
help += "Help属性:弹出对话框,获得控件主要属性的帮助。 ";
help += " 开发作者:延边职大.许老师在线支持:xuhongkaicn@yahoo.com.cn";
help += " 版本更新: Version1.0:2007年";
System.Windows.Forms.MessageBox.Show(help, "帮助信息");
return value;
}
}
protected override void Render(HtmlTextWriter output)
{
//设定按钮默认属性
base.Text = "Button";
base.BorderWidth = 1;
base.Height = 21;
base.Width = 57;
base.BackColor = _MouseOutBgColor;
//获得用户设置的按钮颜色
if (_MouseOutBgColor.ToString() != "" && _MouseOverBgColor.ToString() != "")
{
base.Attributes.Add("onmouseover", "this.style.backgroundColor='" + ColorToString(_MouseOverBgColor) + "';this.style.color='black';");
base.Attributes.Add("onmouseout", "this.style.backgroundColor='" + ColorToString(_MouseOutBgColor) + "';this.style.color='black';");
}
base.Render(output);
}
12、重新生成此控件,并添加到工具箱里,此时拖放控件到网页里选择控件后,查看属性,发现此按钮多了MouseOverBgColor属性,MouseOutBgColor属性,Help属性。
|
|
13、当点帮助属性时,会弹出一个对话框,获得此控件的帮助
抓图太累了,这是第一个例子就详细点吧,以后就只写类了。