
如上圖,在advPropertyGrid上添加一個屬性,屬性值是可選的下拉串列中的一個,現在這個屬性值可以手動輸入不存在于下拉串列中的值,我想把它做成如下圖那種屬性值為集合的形式,就是不允許鍵入值,有什么辦法嘛?

uj5u.com熱心網友回復:
又可以下拉,又可以輸入是怎么實作的?uj5u.com熱心網友回復:
那就直接用 combobox或者dropdownlist就好了。uj5u.com熱心網友回復:
不知道,控制元件自帶的下拉串列就這樣,可能類似于combobox的dorpdown吧uj5u.com熱心網友回復:
怎么直接用combobox的dropdownlist啊?uj5u.com熱心網友回復:
我的怎么不會,你這個系結的是什么型別的變數,還是我們用的版本不一樣uj5u.com熱心網友回復:
你用的是控制元件是PropertyGrid還是DotNetBar的AdvPropertyGrid?PropertyGrid確實不可輸入,但是AdvPropertyGrid就可以,我也搞不懂為啥了,環境是.Net Core 3.0的uj5u.com熱心網友回復:
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,都不檢查輸入的值是否正確
uj5u.com熱心網友回復:
就用你的代碼試了,不會出現啊。你變數是什么型別的,string么?uj5u.com熱心網友回復:
對,是string,但是我這的現象就是可以改而且不檢查
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/68099.html
標籤:組件/控件開發
上一篇:在線流媒體抓取
下一篇:vs2019for Mac
