Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Магическая мистика при добавлении узлов в CTreeCtrl / 4 сообщений из 4, страница 1 из 1
04.09.2005, 12:57
    #33250285
Магическая мистика при добавлении узлов в CTreeCtrl
У меня на диалоге есть объект класса CTreeCtrl .
Данные в него добавляются при помощи двумерного массива
(CString arr[100][100]), т.е. первый элемент каждой "строки матрицы" (например arr[1][0] )соответствует родительскому узлу, а все последующие (arr[1][1], arr[1][2])- его дочерние узлы.
Вот так я добавляю все это в CTreeCtrl:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
void CMyDlg::loadTreeFromArray(){
	this->mTree.DeleteAllItems();
	int i= 0 ;

	while(! arr[i][ 0 ].IsEmpty()){  
		 int j= 1 ;
		 HTREEITEM curParent =this->mTree.InsertItem(arr[i][ 0 ]);
		 while (!arr[i][j].IsEmpty()){
    		   this->mTree.InsertItem(arr[i][j], curParent);	 	
		   j++;
		 }
             i++;
	}
}
Но в результате эти элементы добавляются неправильно (дочерние элементы одних "родителей" попадают к другим по какой-то системе в которой мне лень разбираться).
Попытки найти ошибку в коде (в том числе и при изначальном заполнении массива ) успехом не увенчались, но зато я заметил следующую штуку (см. разницу в коде, там просто добавлен messagebox):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
void CMyDlg::loadTreeFromArray(){
	this->mTree.DeleteAllItems();
	int i= 0 ;

	while(! arr[i][ 0 ].IsEmpty()){  
		 int j= 1 ;
		 HTREEITEM curParent =this->mTree.InsertItem(arr[i][ 0 ]);
		 while (arr[i][j].IsEmpty()){
                       if (i== 2  && j== 2 )// просто чтоб много боксов не выпрыгивало
			this->MessageBox("a");
		     this->mTree.InsertItem(arr[i][j], curParent);	 	
		     j++;
		 }
             i++;
        }
}
Так вот, теперь все работает как надо, если не считать того, что приходится иногда нажимать на ок в messageboxe.
Я не понимаю, в чем дело, может кто-нибудь объяснит?
...
Рейтинг: 0 / 0
05.09.2005, 15:09
    #33251989
Ой Вэй
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Магическая мистика при добавлении узлов в CTreeCtrl
Между этими фрагментами есть и ещё разница, кроме messagebox.
...
Рейтинг: 0 / 0
06.09.2005, 09:56
    #33253044
Магическая мистика при добавлении узлов в CTreeCtrl
Прошу прощения, второй фрагмент был приведен неверно(просто руки кривоваты, не смог copy+paste нормально сделать :)).
Он буквально как первый, если не считать if и следующего за ним messageboxа, разница ТОЛЬКО в этом.
Привожу их снова.
Первый:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
void CMyDlg::loadTreeFromArray(){
	this->mTree.DeleteAllItems();
	int i= 0 ;

	while(! arr[i][ 0 ].IsEmpty()){  
		 int j= 1 ;
		 HTREEITEM curParent =this->mTree.InsertItem(arr[i][ 0 ]);
		 while (!arr[i][j].IsEmpty()){
    		   this->mTree.InsertItem(arr[i][j], curParent);	 	
		   j++;
		 }
             i++;
	}
}



Второй:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
void CMyDlg::loadTreeFromArray(){
	this->mTree.DeleteAllItems();
	int i= 0 ;

	while(! arr[i][ 0 ].IsEmpty()){  
		 int j= 1 ;
		 HTREEITEM curParent =this->mTree.InsertItem(arr[i][ 0 ]);
		 while (!arr[i][j].IsEmpty()){
                       if (i== 2  && j== 2 )// просто чтоб много боксов не выпрыгивало
			this->MessageBox("a");
		     this->mTree.InsertItem(arr[i][j], curParent);	 	
		     j++;
		 }
             i++;
        }
}


Такое впечатление, что этому циклу нужна как-бы задержка какая-то, что-ли.
Для пробы, вместо MessageBox-а вставил операцию обработки произвольной строки- все работает (могу, конечно, так и оставить, но это неприлично имхо:). Убрал- снова не работает.
...
Рейтинг: 0 / 0
06.09.2005, 11:36
    #33253358
SeraTJ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Магическая мистика при добавлении узлов в CTreeCtrl
По-моему, дерево тут совсем ни при чем. Что это еще за дикий двумерный массив CString arr[100][100]. Это ж ужас.
Где и как он заполняется.
Почему у тебя в условиях для заполнения дерева присутствует
arr [j].IsEmpty() ? А если все 100 элементов строки или столбцы заполнены?
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Магическая мистика при добавлении узлов в CTreeCtrl / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]