ライブラリTreeListView
からMainForm があります。ObjectListView
ValueColumn
さまざまなコンポーネントを使用して (2 列目) に値を入力したいと考えていWindows.Forms.Controls
ます。
(名前は jsonTreeView) 法線は、TreeView
すべての値とその型を表示しました。それは私自身のクラスに基づいています:
public class DataTreeNode
{
public string Name { get; set; }
public DataTreeNodeType Type { get; set; }
public string Value { get; set; }
public List<DataTreeNode> Children { get; set; }
}
1 列目はName
、2 列目はValue
、3 列目は です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 プロパティが使用されます。
しかし、comboBox (このコントロールHAS Text
プロパティ) で任意の値を設定しようとすると、戻り値はnull
. コンボボックスに文字列だけでなく、カスタム クラスと標準クラスを追加しようとしましたが、何も起こりません。