我有TreeListView
来自ObjectListView
图书馆的 MainForm。
我想用不同的组件在ValueColumn
(第二列)中输入值。Windows.Forms.Controls
(TreeView
名称为 jsonTreeView)正常显示所有值及其类型。它基于我自己的课程:
public class DataTreeNode
{
public string Name { get; set; }
public DataTreeNodeType Type { get; set; }
public string Value { get; set; }
public List<DataTreeNode> Children { get; set; }
}
第一列是Name
,第二列是,Value
第三列是Type
。我想为不同类型的值创建不同的输入控件(它作为字符串保存在我的类中,但是当转换为 json 时,它就像Type
值一样解析)。
public partial class MainForm :
{
//...
ObjectListView.EditorRegistry.Register(typeof(string), delegate (Object model, OLVColumn column, Object value)
{
var node = model as DataTreeNode;
if(node == null) return new TextBox();
if (column.Index == 1)
{
switch (node.Type)
{
//...
case DataTreeNodeType.Boolean:
var cmbbBool = new ComboBox();
cmbbBool.Items.Add("False");
cmbbBool.Items.Add("True");
return cmbbBool;
case DataTreeNodeType.Str:
return new TextBox();
default:
return new TextBox();
}
}
return new TextBox();
}
//...
}
文档说:
创建单元格编辑器后,将通过控件的 Value 属性为它提供单元格的值(如果它有一个并且它是可写的)。如果它没有可写的 Value 属性,则其 Text 属性将设置为单元格值的文本表示形式。
当用户完成编辑单元格中的值时,新值将被写回模型对象(如果可能)。为了获取修改后的值,默认处理会再次尝试使用 Value 属性。它不起作用,将使用 Text 属性。
但是,当我尝试使用组合框(此控件具有属性)设置任何值时,返回 Text
值为null
. 我不仅尝试在组合框中添加字符串,还尝试在自定义和标准类中添加 - 没有任何反应。