TreeListView
からObjectListView
ライブラリのMainFormがあります。ObjectListView列の#comboboxの値を入力してください
異なるWindows.Forms.Controls
コンポーネントを使用してValueColumn
(第2列)に値を入力したいとします。
TreeView
(名前はjsonTreeView)normalはすべての値とタイプを表示します。それは、私自身のクラスに基づいています:
public class DataTreeNode
{
public string Name { get; set; }
public DataTreeNodeType Type { get; set; }
public string Value { get; set; }
public List<DataTreeNode> Children { get; set; }
}
最初の列は、第二は、Value
と第三Type
であり、Name
です。私は異なるタイプの値(文字列としてクラスに保存されますが、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();
}
//...
}
ドキュメントは言う:
セルエディタを作成したら(それが1を持っており、それが書き込み可能である場合)、それはコントロールのValueプロパティを経由してセルの値を与えています。書き込み可能なValueプロパティがない場合、Textプロパティはセル値のテキスト表現で設定されます。
ユーザーがセルの値の編集を完了すると、新しい値が(可能であれば)モデルオブジェクトに書き戻されます。変更された値を取得するために、既定の処理で再度Valueプロパティを使用しようとします。それは動作しません、代わりにTextプロパティが使用されます。
しかし、私は、コンボボックスで任意の値を設定しようとすると、(このコントロールがText
プロパティを持つ)戻り値はnull
です。 私はコンボボックスの文字列だけでなく、カスタムクラスとスタンダードクラスも追加しようとしましたが、何も起こりません。