如何从GTK中的TreeView中删除多行#

时间:2013-01-16 06:25:11

标签: c# mono gtk gtk#

从单声道GTK中的TreeView中删除多行#最近让我绊了一下,答案并不是快速谷歌搜索,所以我在这里发布这个问题。在使用TreeView(TreeModelSort)进行排序时,删除多行是一个额外的问题。

1 个答案:

答案 0 :(得分:4)

以下函数可以删除未实现花式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);
    }
}

如果有人有更好的方法来执行此操作或查看我的解决方案中的任何错误,请发布修复程序,谢谢!