然后定义一个编辑器,其实所有这些的编辑器功能相当于一个“桥接器”,使属性与自定义 Form 窗体关联起来。代码如下:
/// <summary>
/// 获得本书更多内容,请看:
/// http://blog.csdn.net/ChengKing/archive/2008/08/18/2792440.aspx
/// </summary>
public class CalculatorSelectEditor : System.Drawing.Design.UITypeEditor
{
public CalculatorSelectEditor()
{
}
public override System.Drawing.Design.UITypeEditorEditStyle GetEditStyle
(System.ComponentModel.ITypeDescriptorContext context)
{
return UITypeEditorEditStyle.Modal;
}
public override object EditValue(System.ComponentModel.ItypeDescriptor
Context context,System.IServiceProvider provider,object value)
{
IWindowsFormsEditorService service = (IWindowsFormsEditorService)
provider.GetService(typeof(IWindowsFormsEditorService));
if (service == null)
{
return null;
}
FormKeyBoard form = new FormKeyBoard();
if (service.ShowDialog(form) == DialogResult.OK)
{
object strReturn = form.strReturnValue;
return strReturn;
}
return value;
}
}
此类的功能是弹出一个模式的计算器Form 窗体,与4.5.2.2 节定义的编辑器功能几乎一样,这 里就不作多讲,如果还有不明白的地方请回顾一下前面章节的内容。
最后定义主控件代码类,如下所示:
/// <summary>
/// 获得本书更多内容,请看:
/// http://blog.csdn.net/ChengKing/archive/2008/08/18/2792440.aspx
/// </summary>
[DefaultProperty("Money")]
[ToolboxData("<{0}:CalculatorSelectControl
runat=server></{0}:CalculatorSelectControl>")]
public class CalculatorSelectControl : WebControl
{
[Bindable(true)]
[Category("自定义计算机属性")]
[DefaultValue("")]
[Localizable(true)]
[Editor(typeof(CalculatorSelectEditor),typeof(System.Drawing.Design. UITypeEditor))]
[Description("请输入金额")]
public string Money
{
get
{
string s = (string)ViewState["Money"];
return ((s == null) ? "" : s);
}
set
{
ViewState["Money"] = value;
}
}
//… …
}