自分で解決できない簡単な質問があります。
オブジェクトの一部で満たされた ObjectListView があります。しかし、それに加えて、デフォルトのテキスト「削除」を含む別の列が必要です。その列をクリックすると、選択した行が削除されます。それ、どうやったら出来るの?
自分で解決できない簡単な質問があります。
オブジェクトの一部で満たされた ObjectListView があります。しかし、それに加えて、デフォルトのテキスト「削除」を含む別の列が必要です。その列をクリックすると、選択した行が削除されます。それ、どうやったら出来るの?
これを行うには、目的の行を編集可能にし、CellEditActivation イベントを使用します。次のように、OLV と「delete-column」を初期化します。
// fire cell edit event on single click
objectListView1.CellEditActivation = ObjectListView.CellEditActivateMode.SingleClick;
objectListView1.CellEditStarting += ObjectListView1OnCellEditStarting;
// enable cell edit and always set cell text to "Delete"
deleteColumn.IsEditable = true;
deleteColumn.AspectGetter = delegate {
return "Delete";
};
次に、列がクリックされるとすぐに、CellEditStarting ハンドラーで行を削除できます。
private void ObjectListView1OnCellEditStarting(object sender, CellEditEventArgs e) {
// special cell edit handling for our delete-row
if (e.Column == deleteColumn) {
e.Cancel = true; // we don't want to edit anything
objectListView1.RemoveObject(e.RowObject); // remove object
}
}
これを改善するために、テキストに加えて画像を表示できます。
// assign an ImageList containing at least one image to SmallImageList
objectListView1.SmallImageList = imageList1;
// always display image from index 0 as default image for deleteColumn
deleteColumn.ImageGetter = delegate {
return 0;
};
結果:
画像の横にテキストを表示したくない場合は、使用できます
deleteColumn.AspectToStringConverter = delegate {
return String.Empty;
};
Aspect を空の文字列に設定することもできますが、これは「ベスト プラクティス」と考えてください。アスペクトを返すことで、並べ替えとグループ化は引き続き機能します。
「削除」列が の最初の列でない場合はObjectListView
、設定する必要があります
ShowImagesOnSubItems = true;
ObjectListView のアイコン表示も参照してください。