如何在gtk#中从TreeView中删除多行

本文关键字:删除 TreeView 中从 gtk# | 更新日期: 2023-09-27 17:53:24

在mono gtk#中从TreeView中删除多行最近让我有点困惑,答案不是快速的谷歌搜索,所以我在这里发布这个问题。当使用TreeView (TreeModelSort)排序时,删除多行是额外的问题。

如何在gtk#中从TreeView中删除多行

下面的函数可以删除没有实现花哨的TreeModelSort或TreeModelFilter的普通TreeView上的多个选定行:

private void RemoveSelectedRows(TreeView treeView, ListStore listStore)
{
    TreeIter iter;
    TreePath[] treePath = treeView.Selection.GetSelectedRows();
    for (int i  = treePath.Length; i > 0; i--)
    {
        listStore.GetIter(out iter, treePath[(i - 1)]);
        string value = (string)listStore.GetValue(iter, 0);
        Console.WriteLine("Removing: " + value);
        listStore.Remove(ref iter);
    }
}

下一个函数可以删除多个选定的行在一个TreeView,实现TreeModelSort(类似的逻辑可以应用,如果你的TreeView是使用TreeModelFilter):

private void RemoveSelectedRows(TreeView treeView, ListStore listStore, TreeModelSort treeModelSort)
{
    TreeModel model;
    TreeIter iter;
    TreePath[] treePath = treeView.Selection.GetSelectedRows(out model);
    for (int i  = treePath.Length; i > 0; i--)
    {
        model.GetIter(out iter, treePath[(i - 1)]);
        string value = (string)model.GetValue(iter, 0);
        Console.WriteLine("Removing: " + value);
        TreeIter childIter = treeModelSort.ConvertIterToChildIter(iter);
        listStore.Remove(ref childIter);
    }
}
如果有人有更好的方法来做这件事,或者看到我的解决方案中的任何错误,请发布修复,谢谢!