怎么让DotNetBar的AdvPropertyGrid控件的下拉列表不可键入值?

LB__x 2020-02-25 04:29:02

如上图,在advPropertyGrid上添加一个属性,属性值是可选的下拉列表中的一个,现在这个属性值可以手动输入不存在于下拉列表中的值,我想把它做成如下图那种属性值为集合的形式,就是不允许键入值,有什么办法嘛?

...全文
330 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
LB__x 2020-02-27
  • 打赏
  • 举报
回复
对,是string,但是我这的现象就是可以改而且不检查
LB__x 2020-02-26
  • 打赏
  • 举报
回复
public class OptionCollectionAttribute : System.Attribute { /// <summary> /// 构造器 /// </summary> /// <param name="optionValues">用逗号分隔的可选择项目(例:"A,B,C")</param> public OptionCollectionAttribute(string optionValues) { if (!string.IsNullOrEmpty(optionValues)) { string[] spliter = new string[] { "," }; string[] values = optionValues.Split(spliter, StringSplitOptions.RemoveEmptyEntries); if (values != null && values.Length > 0) { _OptionCollection.AddRange(values); } } } List<string> _OptionCollection = new List<string>(); /// <summary> /// 获取可供选择的项目集合 /// </summary> public List<string> OptionCollection { get { return _OptionCollection; } } } public partial class OptionValuesTypeConvertor : StringConverter { public override bool GetStandardValuesSupported(ITypeDescriptorContext context) { return true; } public override bool GetStandardValuesExclusive(ITypeDescriptorContext context) { return true; } public override TypeConverter.StandardValuesCollection GetStandardValues(ITypeDescriptorContext context) { if (context.Instance == null) return base.GetStandardValues(context); //找到当前操作的属性 System.Reflection.PropertyInfo[] propertyInfos = context.Instance.GetType().GetProperties(); System.Reflection.PropertyInfo currentProperty = null; foreach (System.Reflection.PropertyInfo info in propertyInfos) { if (info.Name == context.PropertyDescriptor.Name) { currentProperty = info; break; } } if (currentProperty == null) return base.GetStandardValues(context); //找到当前操作的属性的OptionCollectionAttribute特性,并根据该特性的值得到可选集合 object[] optionCollectionAttributes = currentProperty.GetCustomAttributes(typeof(OptionCollectionAttribute), false); if (optionCollectionAttributes != null && optionCollectionAttributes.Length > 0 && optionCollectionAttributes[0] is OptionCollectionAttribute) { OptionCollectionAttribute myAttribute = optionCollectionAttributes[0] as OptionCollectionAttribute; return new StandardValuesCollection(myAttribute.OptionCollection); } else { return base.GetStandardValues(context); } } } 绑的是固定值的两个string,用了上面的转换器 [TypeConverter(typeof(OptionValuesTypeConvertor))] [OptionCollection("常规,日立杯")] 用的时候就把这两个属性赋给需要的变量了 而且我不知道为什么,GetStandardValuesExclusive方法不管是赋值true还是false,都不检查输入的值是否正确
LB__x 2020-02-26
  • 打赏
  • 举报
回复
你用的是控件是PropertyGrid还是DotNetBar的AdvPropertyGrid?PropertyGrid确实不可输入,但是AdvPropertyGrid就可以,我也搞不懂为啥了,环境是.Net Core 3.0的
Bridge_go 2020-02-26
  • 打赏
  • 举报
回复
我的怎么不会,你这个绑定的是什么类型的变量,还是我们用的版本不一样
LB__x 2020-02-26
  • 打赏
  • 举报
回复
怎么直接用combobox的dropdownlist啊?
LB__x 2020-02-26
  • 打赏
  • 举报
回复
不知道,控件自带的下拉列表就这样,可能类似于combobox的dorpdown吧
Bridge_go 2020-02-26
  • 打赏
  • 举报
回复
就用你的代码试了,不会出现啊。你变量是什么类型的,string么?
正怒月神 2020-02-25
  • 打赏
  • 举报
回复
那就直接用 combobox或者dropdownlist就好了。
Bridge_go 2020-02-25
  • 打赏
  • 举报
回复
又可以下拉,又可以输入是怎么实现的?

8,834

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 组件/控件开发
社区管理员
  • 组件/控件开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧