Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сортировка узлов treeView, траблы с реализацией 
:(
    Опции темы
Sartorius
Дата 5.2.2007, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1568
Регистрация: 18.7.2006
Где: Ivory tower

Репутация: нет
Всего: 37



Всем привет smile 
Возникла следующая проблема : отсортировать коллекцию нод к которой принадлежит выделенная в алфавитном порядке... но чего-то не получается. Не обращайте внимание на неэффективность кода - это я уже извращался. Просто я .NET до этого практически не писал - поэтому могут быть совсем тупые ошибки

Код

private void sortNodes()
        {
            TreeNodeCollection Nodes;

            if (treeView1.SelectedNode == null) return;
            if (treeView1.SelectedNode.Parent == null)
            {
                if (treeView1.Nodes != null) 
                    Nodes = treeView1.Nodes;
                else
                    return;

            }
            else
            {
                if (treeView1.SelectedNode.Parent.Nodes != null)
                    Nodes = treeView1.SelectedNode.Parent.Nodes;
                else
                return;
            }

            TreeNode[] Ar = new TreeNode[Nodes.Count];
            if (Nodes.Count == 0)
                return;
            int i = 0;
            foreach (TreeNode tn in Nodes)
            {
                Ar[i] = (TreeNode)tn.Clone();
            }            

            Nodes.Clear();

            TreeNode tn1, tn2, tn3;
            int index;
            for (i = Nodes.Count - 1; i > 0; i--)
                for (int j = 0; j < i; j++)
                {
                    tn1 = Ar[j];
                    tn2 = Ar[j + 1];
                    if (tn2.Text.CompareTo(tn1.Text) < 0)
                    {
                        Ar[j + 1] = tn1;
                        Ar[j] =     tn2;

                    }                    
                }
            for(i = 0; i < Ar.Length; i++)
                Nodes.Insert(i, Ar[i]); // <- от тут вот исключение - Ar[i] нулевой оказался
        }



Это сообщение отредактировал(а) Sartorius - 5.2.2007, 12:13
PM MAIL ICQ   Вверх
mr.DUDA
Дата 5.2.2007, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 24
Всего: 232



А так:
Код
using System;
using System.Windows.Forms;
using System.Collections;

namespace WindowsApplication3
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        class SelectedTreeSorter : IComparer
        {
            TreeNode _selectedNode;

            public SelectedTreeSorter(TreeNode selectedNode)
            {
                _selectedNode = selectedNode;
            }

            public int Compare(object ox, object oy)
            {
                TreeNode x = (TreeNode)ox;
                TreeNode y = (TreeNode)oy;

                // сортируем только узлы под выделенным, для остальных - 0 ("одинаковые")
                if (x.Parent != _selectedNode || y.Parent != _selectedNode)
                    return 0;

                return x.Text.CompareTo(y.Text);
            }
        }

        void sortNodes()
        {
            treeView1.TreeViewNodeSorter = new SelectedTreeSorter(treeView1.SelectedNode);
            treeView1.Sort();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            sortNodes();
        }
    }
}




--------------------
user posted image
PM MAIL WWW   Вверх
Sartorius
Дата 5.2.2007, 19:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1568
Регистрация: 18.7.2006
Где: Ivory tower

Репутация: нет
Всего: 37



mr.DUDA,  спасибо... Эх забыл указать. Нужен Compact Framework. (Я под Windows Mobile пишу) А там много чего нет. Нет, например, метода Sort() у TreeView.  smile   

PM MAIL ICQ   Вверх
Sartorius
Дата 6.2.2007, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1568
Регистрация: 18.7.2006
Где: Ivory tower

Репутация: нет
Всего: 37



  smile  Больше так долго за компом сидеть не буду :
Код

            foreach (TreeNode tn in Nodes)
            {
                Ar[i] = (TreeNode)tn.Clone();
            }      


 Забыл i++;

Код

Nodes.Clear();

 Почистил, а потом
Код

for (i = Nodes.Count - 1; i > 0; i--)


PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.0951 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.