62,263
社区成员
发帖
与我相关
我的任务
分享
以下是我自定义的一个控件。现在有两个问题:
1。控件放到页面上后无法正常显示。但更改某一属性后就能显示出来,但在源码与设计视图之间切换后就不好使了。可是在运行状态下可以正常显示。
2。控件的VALUE等属性值为什么不更新。在属性设计器里就不好使,运行时点增加或减少按钮都没有反应。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace GoldWisdom
{
/// <summary>
/// 数值微调控件(可指定最小值,最大值,步长,增长方式,如指数式、幂式等)
/// </summary>
[DefaultProperty("Value")]
//[Designer(typeof(GWNumericDesigner))]
[ToolboxData("<{0}:GWNumericUpDown runat=server></{0}:GWNumericUpDown>")]
public class GWNumericUpDown : WebControl, INamingContainer
{
[Bindable(true)]
[Category("Appearance")]
[DefaultValue("")]
[Localizable(true)]
//增加子控件
private Button btn_add;
//减少子控件
private Button btn_sub;
//文本框子控件
private TextBox tb_Nummber;
#region 私有变量
//初始值
private int _value ;
//步长
private int _step ;
//最大值
private int _maxvalue ;
//最小值
private int _minvalue ;
//是否允许负值
private bool _allownegative = true;
#endregion
#region 属性
/// <summary>
/// 初始值
/// </summary>
[Bindable(true)]
[Category("设定")]
[Localizable(true)]
[Description("控件的初始值")]
[NotifyParentProperty(true)]
public int Value
{
get { EnsureChildControls(); return _value; }
set
{
EnsureChildControls();
if (value >= this.MinValue && value <= this.MaxValue)
_value = value;
}
}
/// <summary>
/// 步长
/// </summary>
[Bindable(true)]
[Category("设定")]
[DefaultValue(1)]
[Localizable(true)]
[Description("设置每次点击增加或减少按钮时,变化的值")]
[NotifyParentProperty(true)]
public int Step
{
get { EnsureChildControls(); return _step; }
set
{
EnsureChildControls();
if (value >= 1)
_step = value;
}
}
/// <summary>
/// 最大值
/// </summary>
[Bindable(true)]
[Category("设定")]
[Localizable(true)]
[Description("设置控件的最大值")]
[NotifyParentProperty(true)]
public int MaxValue
{
get { EnsureChildControls(); return _maxvalue; }
set
{
EnsureChildControls();
if (value >= this.MinValue)
_maxvalue = value;
if (value < this.Value)
_maxvalue = this.Value;
}
}
/// <summary>
/// 控件值
/// </summary>
[Bindable(true)]
[Category("设定")]
[Localizable(true)]
[Description("设置控件的最小值")]
[NotifyParentProperty(true)]
public int MinValue
{
get { EnsureChildControls(); return _minvalue; }
set
{
EnsureChildControls();
if (value <= this.MaxValue)
{
_minvalue = value;
}
if (value > this.Value)
this.Value = value;
}
}
/// <summary>
/// 是否允许负值
/// </summary>
[Bindable(true)]
[Category("设定")]
[Localizable(true)]
[Description("设置是否允许负值")]
[NotifyParentProperty(true)]
public bool AllowNegative
{
get { EnsureChildControls(); return _allownegative; }
set { EnsureChildControls(); _allownegative = value; }
}
#endregion
#region 事件
protected void btn_add_Click(object sender, EventArgs e)
{
if (this.MaxValue == 0)
{
this.Value =this.Value + this.Step;
}
else
{
if ((this.Value + this.Step) > this.MaxValue)
{
return;
}
else
{
this.Value = this.Value+ this.Step;
}
}
this.tb_Nummber.Text = this.Value.ToString();
}
protected void btn_sub_Click(object sender, EventArgs e)
{
if (this.MinValue == 0)
{
if (AllowNegative)
this.Value = Convert.ToInt16(this.tb_Nummber.Text) - this.Step;
else
{
if ((this.Value - this.Step) < 0)
{
return;
}
}
}
else
{
if ((this.Value - this.Step) < this.MinValue)
{
return;
}
else
{
this.Value = this.Value - this.Step ;
}
}
this.tb_Nummber.Text = this.Value.ToString();
}
#endregion
#region 创建子控件
protected override void CreateChildControls()
{
Controls.Clear();
btn_add = new Button();
btn_add.ID = "btn_add";
btn_add.Text = "+";
btn_add.Width = 10;
btn_add.Height = 15;
btn_add.Click+=new EventHandler(btn_add_Click);
btn_sub = new Button();
btn_sub.ID = "btn_sub";
btn_sub.Text = "-";
btn_sub.Width = 10;
btn_sub.Height = 15;
btn_sub.Click +=new EventHandler(btn_sub_Click);
tb_Nummber = new TextBox();
tb_Nummber.ID = "tb_Nummber";
tb_Nummber.Text = this.Value.ToString();
tb_Nummber.Attributes["contentEditable"] = "false";
tb_Nummber.Attributes.Add("style", "text-align:right");
Controls.Add(btn_add);
Controls.Add(btn_sub);
Controls.Add(tb_Nummber);
}
#endregion
//#region 呈现控件
protected override void Render(HtmlTextWriter writer)
{
AddAttributesToRender(writer);
writer.AddAttribute(HtmlTextWriterAttribute.Cellpadding, "0", false);
writer.RenderBeginTag(HtmlTextWriterTag.Table);
writer.RenderBeginTag(HtmlTextWriterTag.Tr);
writer.AddAttribute(HtmlTextWriterAttribute.Rowspan, "2");
writer.RenderBeginTag(HtmlTextWriterTag.Td);
//
tb_Nummber.RenderControl(writer);
writer.RenderEndTag(); // Td
writer.RenderBeginTag(HtmlTextWriterTag.Td);
//
btn_add.RenderControl(writer);
writer.RenderEndTag(); // Td
writer.RenderEndTag();
writer.RenderBeginTag(HtmlTextWriterTag.Tr);
//writer.RenderBeginTag(HtmlTextWriterTag.Td);
////
//writer.RenderEndTag(); // Td
writer.RenderBeginTag(HtmlTextWriterTag.Td);
btn_sub.RenderControl(writer);
writer.RenderEndTag(); // Td
writer.RenderEndTag(); // Tr
writer.RenderEndTag(); // Table
}
//#endregion
}
}