У меня есть MainForm с TreeListView
из ObjectListView
библиотека.C# combobox в столбце ObjectListView при вводе значения
Я хочу ввести значения в 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 управления (если он есть, и она доступна для записи). Если у него нет свойства записи для записи, его свойство Text будет установлено с текстовым представлением значения ячеек.
Когда пользователь закончил редактирование значения в ячейке, новое значение будет записано обратно в объект модели (если возможно). Чтобы получить измененное значение, обработка по умолчанию пытается снова использовать свойство Value. Это не работает, вместо этого будет использовано свойство Text.
Но когда я пытаюсь установить любое значение с COMBOBOX (этот контроль HASText
свойство) возвращаемое значение null
. Я попытался добавить не только строки в combobox, но и обычные и стандартные классы - ничего не происходит.