c# – 在UITypeEditor的EditValue中访问其他上下文数据
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 在UITypeEditor的EditValue中访问其他上下文数据,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2428字,纯文字阅读大概需要4分钟。
内容图文
![c# – 在UITypeEditor的EditValue中访问其他上下文数据](/upload/InfoBanner/zyjiaocheng/821/2e70aaebad604b7daab648ad5b99cae5.jpg)
我正在调整一个WinForms应用程序.此应用程序具有包含PropertyGrid的窗体.将一个对象分配给SelectedObject属性,以便属性网格显示该对象的属性.
分配的对象类型具有一个属性,该属性带有指定UITypeEditor的EditorAttribute.
UITypeEditor的这个实现在其GetEditStyle方法的重写中返回UITypeEditorEditStyle.Drop.它的EditValue方法显示一个ListBox,可以从中分配实例属性的值.
到目前为止一切顺利.
现在我有一个额外的要求,要求根据托管PropertyGrid的表所持有的其他状态修改列表中的可用项.我无法弄清楚如何将此上下文信息提供给EditValue方法.
即使我尝试将其转换为更具体的类型,上下文参数似乎也没有任何内容.我也不知道如何添加其他服务以从提供程序检索.
有任何想法吗?
解决方法:
我想知道你想要做什么会通过GetStandardValues更好地作为TypeConverter?但无论哪种方式,context.Instance和context.PropertyDescriptor似乎都在快速测试中填充(对于GetEditStyle和EditValue):
using System;
using System.ComponentModel;
using System.Drawing.Design;
using System.Windows.Forms;
class MyData
{
[Editor(typeof(MyEditor), typeof(UITypeEditor))]
public string Bar { get; set; }
public string[] Options { get; set; }
}
class MyEditor : UITypeEditor
{
public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
{
// break point here; inspect context
return UITypeEditorEditStyle.DropDown;
}
public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
{
// break point here; inspect context
return base.EditValue(context, provider, value);
}
}
class Program
{
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.Run(new Form
{
Controls =
{
new PropertyGrid {
Dock = DockStyle.Fill,
SelectedObject = new MyData()
}
}
});
}
}
或者作为类型转换器:
using System;
using System.ComponentModel;
using System.Windows.Forms;
class MyData
{
[TypeConverter(typeof(MyConverter))]
public string Bar { get; set; }
public string[] Options { get; set; }
}
class MyConverter : StringConverter
{
public override bool GetStandardValuesSupported(ITypeDescriptorContext context)
{
return true;
}
public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)
{
MyData data = (MyData)context.Instance;
if(data == null || data.Options == null) {
return new StandardValuesCollection(new string[0]);
}
return new StandardValuesCollection(data.Options);
}
}
class Program
{
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.Run(new Form
{
Controls =
{
new PropertyGrid {
Dock = DockStyle.Fill,
SelectedObject = new MyData()
}
}
});
}
}
内容总结
以上是互联网集市为您收集整理的c# – 在UITypeEditor的EditValue中访问其他上下文数据全部内容,希望文章能够帮你解决c# – 在UITypeEditor的EditValue中访问其他上下文数据所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。