功能描述: 点击省略号按钮,弹出下拉框(也可以是提示窗口),显示自定义用户控件
效果图:
1.创建用户控件:
public partial class PropertyGridMoreControl : UserControl
{
private object Val;
/// <summary>
/// 构造函数
/// </summary>
/// <param name="val"></param>
public PropertyGridMoreControl(object val)
{
InitializeComponent();
Val = val;
}
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnGetPlatPoint_Click(object sender, EventArgs e)
{
if (Val.GetType() == typeof(Point))
{
MessageBox.Show("Point类型为:" + Val.ToString());
return;
}
if (Val.GetType() == typeof(double))
{
MessageBox.Show("double类型为:" + Val.ToString());
return;
}
}
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnMoveTo_Click(object sender, EventArgs e)
{
if (Val.GetType() == typeof(Point))
{
MessageBox.Show("Point类型为:" + Val.ToString());
return;
}
if (Val.GetType() == typeof(double))
{
MessageBox.Show("double类型:" + Val.ToString());
return;
}
}
}
2.创建编辑器
/// <summary>
///
/// </summary>
public class Editor : UITypeEditor
{
/// <summary>
/// 更改属性值编辑样式(增加省略号按钮)
/// </summary>
/// <param name="context"></param>
/// <returns></returns>
public override UITypeEditorEditStyle GetEditStyle(System.ComponentModel.ITypeDescriptorContext context)
{
return UITypeEditorEditStyle.Modal;
}
/// <summary>
/// 增加自定义用户控件
/// </summary>
/// <param name="context"></param>
/// <param name="provider"></param>
/// <param name="value"></param>
/// <returns></returns>
public override object EditValue(System.ComponentModel.ITypeDescriptorContext context, System.IServiceProvider provider, object value)
{
var formES = provider.GetService(typeof(IWindowsFormsEditorService)) as IWindowsFormsEditorService;
if (formES != null)
{
var popedControl = new PropertyGridMoreControl(value);
//弹出窗口
//formES.ShowDialog(窗口/对话框);
//下拉框
formES.DropDownControl(popedControl);
}
return base.EditValue(context, provider, value);
}
}
3.配置属性编辑器
/// <summary>
///
/// </summary>
[Editor(typeof(Editor), typeof(UITypeEditor))]
public Point PntFeeding { get; set; }
完结。