3

モノラルGTK#のTreeViewから複数の行を削除すると、最近少しつまずきました。答えはグーグルですばやく検索できなかったので、この質問をここに投稿します。TreeView(TreeModelSort)で並べ替えを使用する場合、複数の行を削除することは非常に問題がありました。

4

1 に答える 1

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);
    }
}

この次の関数は、TreeModelSortを実装するTreeViewで選択された複数の行を削除できます(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);
    }
}

誰かがこれを行うためのより良い方法を持っているか、私のソリューションにバグを見つけた場合は、修正を投稿してください、ありがとう!

于 2013-01-16T06:25:11.293 に答える