【发布时间】:2021-09-03 13:55:38
【问题描述】:
我正在尝试将属性网格上的下拉列表转换为允许用户选择多个结果的复选框列表下拉列表。目前,我已经设法建立了一个用户可以选择的下拉选项列表,但它只允许用户选择一个。我希望用户选择超过 1 个选项,并且 Game_Type 字段将跟踪选择的内容,并用逗号分隔“射手,体育”等选项。我该怎么做?
预期的控件名称旁边应该有一个复选框,如下所示:
下面显示的代码包括一个游戏类、一个用于下拉列表的类型转换器以及创建对象并将其添加到属性网格的表单。
public class Game
{
public string name { set; get; }
[Browsable(false)]
public List<string> listOfGameTypes { set; get; }
[DisplayName("Game Type")]
[TypeConverter(typeof(Game_Type_Converter))]
public string Game_Type { get; set; }
public Game()
{
listOfGameTypes = new List<string>();
}
}
.
public class Game_Type_Converter : TypeConverter
{
public override bool GetStandardValuesSupported(ITypeDescriptorContext context)
{
return true;
}
public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)
{
var obj = context.Instance as Game;
if (obj != null)
{
List<string> list = new List<string>();
foreach (String s in obj.listOfGameTypes)
{
list.Add(s);
}
return new StandardValuesCollection(list);
}
return base.GetStandardValues(context);
}
}
.
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
Game g = new Game();
g.name = "FIFA 22";
g.listOfGameTypes.Add("Shooter");
g.listOfGameTypes.Add("Sports");
g.listOfGameTypes.Add("Action");
propertyGrid1.SelectedObject = g;
}
}
【问题讨论】:
-
我不确定我是否同意你的评论... ” ...一个组合框下拉菜单,允许用户选择多个结果。” ...直观地说,组合框允许从众多选择中仅选择一 (1) 个。这是组合框的常见行为。如果你想创建一个如你所描述的那样,那么我的第一个问题是“如何”显示“哪些”项目被选中?此外,这对用户来说并不直观。这听起来像一个
CheckedListBox控件。我错过了什么吗? -
你是对的,它是一个 CheckedListBox 我想在这里申请。我刚刚意识到我在寻找错误的控制。我混淆了复选框和检查列表。我现在将尝试使用检查列表框找到解决方案。感谢您的帮助!
-
仍然无法找到解决方案。
-
你不能只使用 TypeConverter,你必须使用 UITypeEditor,像这样:stackoverflow.com/questions/40718467/… 或 codeproject.com/Articles/23844/…
标签: c# propertygrid checklistbox