然后定义一个编辑器,其实所有这些的编辑器功能相当于一个“桥接器”,使属性与自定义 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;
}
}
//… …
}
主控件中定义了一个表示金额的Money 属性,并指定设计时的编辑器为我们上面定义的计算器 编辑器类:
[Editor(typeof(CalculatorSelectEditor),typeof (System.Drawing.Design.UITypeEditor))]
编译此控件,在属性窗口中单击属性旁边的“… ”按钮即可以看到我们定义的计算器编辑器, 如图4-27 所示。
图4-27 属性窗口
本节内容已经讲解完。本节主要实现了几个自定义功能的编辑器:多类型子项集合编辑器、弹 出式模态数据选择编辑器、下拉式数据选择编辑器,最后综合运用前面的知识实现了一个计算器编 辑器。限于篇幅,示例都比较简单,但已经足以说明其用法了。另外,在定义自己的编辑器时,除 了使用编辑器基类外,还可以把 4.5.1 节列出的那些系统编辑器作为基类使用 |