Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Узнать текст выбранного нода из другой формы. / 14 сообщений из 14, страница 1 из 1
08.12.2004, 12:07
    #32818328
nostra
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать текст выбранного нода из другой формы.
На форме frmGraphManager находится TreeView. На 2-ой форме (frmProperties) находится текстбокс txtDescription.
Использую следующий код, но возникает ошибка System.NullReferenceException (Object reference not set to an instance of an object.):

frmGraphManager frm = new frmGraphManager ();
TreeView tvw=(TreeView)frm.Controls[0];
txtDescription.Text=tvw.SelectedNode.Text; <-- Ошибка происходит здесь.

Как узнать текст выбранного нода на форме frmGraphManager из другой формы?
...
Рейтинг: 0 / 0
08.12.2004, 12:36
    #32818434
Gasanov2003
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать текст выбранного нода из другой формы.
А ты уверен в том что tvw заполнен нодами на момент вызова
txtDescription.Text=tvw.SelectedNode.Text; ?
В ошибке говорится о том что ссылка не инициализирована объектом. Скорее всего проблема в том что tvw у тебя пустой
...
Рейтинг: 0 / 0
08.12.2004, 13:12
    #32818556
nostra
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать текст выбранного нода из другой формы.
В том что дерево заполнено нодами абсолюно уверен. Своими глазами видел :))
Но, когда пишешь txtDescription.Text=tvw.ToString();
В поле появляется строка : System.Windows.Forms.TreeView, Nodes.Count: 0
Таким образом, получается, что якобы дерево не заполнено.
Странно :((
...
Рейтинг: 0 / 0
08.12.2004, 13:15
    #32818569
nostra
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать текст выбранного нода из другой формы.
Ну и соответственно
txtDescription.Text=tvw.Nodes.Count.ToString();
даёт тот же результат = 0;
...
Рейтинг: 0 / 0
08.12.2004, 13:32
    #32818633
nostra
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать текст выбранного нода из другой формы.
Если добавить узлы в панели свойств (т.е. в InitializeComponent()), то количество узлов определяется как не нулевое. Но мне необходимо динамически изменять узлы в дереве, т.е. в InitializeComponent не пропишешь.
...
Рейтинг: 0 / 0
08.12.2004, 14:23
    #32818775
nostra
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать текст выбранного нода из другой формы.
Ну если вторая форма не принимает значение из 1-ой, то я передал значение из1-ой форму во вторую.
Т.о. вопрос закрыт.
...
Рейтинг: 0 / 0
08.12.2004, 14:32
    #32818797
Gasanov2003
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать текст выбранного нода из другой формы.
nostraНа форме frmGraphManager находится TreeView. На 2-ой форме (frmProperties) находится текстбокс txtDescription.
Использую следующий код, но возникает ошибка System.NullReferenceException (Object reference not set to an instance of an object.):

frmGraphManager frm = new frmGraphManager ();
TreeView tvw=(TreeView)frm.Controls[0];
txtDescription.Text=tvw.SelectedNode.Text; <-- Ошибка происходит здесь.

Как узнать текст выбранного нода на форме frmGraphManager из другой формы?

Что - то мне кажется все таки tvw не заполнен. Говоришь своими глазами видел. Твоим глазам я верю, но все зависит от того где ты видел (в каком месте). А покажи код, где ты заполняешь дерево.

Я думаю надо поступить примерно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
// создал ссылку и присвоил объект
frmGraphManager frm = new frmGraphManager ();

// создал ссылку и присвоил объект. Объект пока не заполнен
TreeView tvw=(TreeView)frm.Controls[ 0 ];

//
// To do здесь заполни дерево tvw нодами
//

// а теперь получи текст выбранного нода
txtDescription.Text=tvw.SelectedNode.Text; 
...
Рейтинг: 0 / 0
08.12.2004, 14:39
    #32818822
Gasanov2003
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать текст выбранного нода из другой формы.
nostraНа форме frmGraphManager находится TreeView. На 2-ой форме (frmProperties) находится текстбокс txtDescription.
Использую следующий код, но возникает ошибка System.NullReferenceException (Object reference not set to an instance of an object.):

frmGraphManager frm = new frmGraphManager ();
TreeView tvw=(TreeView)frm.Controls[0];
txtDescription.Text=tvw.SelectedNode.Text; <-- Ошибка происходит здесь.

Как узнать текст выбранного нода на форме frmGraphManager из другой формы?

А еще попробуй для отладки так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
frmGraphManager frm = new frmGraphManager ();
TreeView tvw=(TreeView)frm.Controls[ 0 ];

// Проверим заполнено ли дерево и выбран ли нод
frm.Show();
//

txtDescription.Text=tvw.SelectedNode.Text; 
...
Рейтинг: 0 / 0
08.12.2004, 15:26
    #32818969
nostra
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать текст выбранного нода из другой формы.
Я даже рад, что переписка продолжилась, потому что проблема "захвата" данных из 1-ой формы другой осталась (хоть передачу из 1-ой во 2-ю осуществил).

Создал новый экспериментальный проектик. Условия задачи: существуют 2 формы (Form1 и Form2).
На Form1 находится дерево tvw1, содержимое которой зависит от другого дерева (такие уж правила).
Заполняем дерево:
private void Form1_Load(object sender, System.EventArgs e)
{
for (int i=0; i<5; i++)
tvw1.Nodes.Add ("Item " + i.ToString());
}
К tvw1 привязал контаксное меню с одним итемом:
private void menuItem1_Click(object sender, System.EventArgs e)
{
Form2 frm2 = new Form2();
frm2.Show();
}
При загрузке формы Form2 заполняем поле txtBox:
private void frm_Load(object sender, System.EventArgs e)
{
Form1 frmNew = new Form1 ();
TreeView tvw2=(TreeView)frm.Controls[0];
txtBox.Text=tvw2.Nodes.Count.ToString();
}

Узлы в tvw1 существуют, но txtBox.Text=0. Происходит это потому, что переменная frmNew ссылается не на открытую форму класса Form1, а на новый объект, в котором дерево без узлов. А сделать ссылку именно на открытую форму Form1?
...
Рейтинг: 0 / 0
08.12.2004, 15:57
    #32819048
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать текст выбранного нода из другой формы.
У вас проблемы с передачей параметров из одной формы в другую.
Предложу может не совсем стандартный способ, но работающий:

В вызываемой форме находится public метод, который и выполняет .show
для себя. В качестве параметров - переменные типа TreeVew (и (или) TextBox),
переданные по ссылке.
Делаем с ними что хотим в этой вызванной форме.
...
Рейтинг: 0 / 0
08.12.2004, 17:34
    #32819323
Gasanov2003
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать текст выбранного нода из другой формы.
nostra Узлы в tvw1 существуют, но txtBox.Text=0. Происходит это потому, что переменная frmNew ссылается не на открытую форму класса Form1, а на новый объект, в котором дерево без узлов. А сделать ссылку именно на открытую форму Form1?

Я об этом тебе и намекал в сообщениях выше.

Здесь надо продумать как построить многооконное приложение.
Возможных реализаций множество и зависит от конкретной задачи.

Предлагаю следующую архитектуру:
Есть главная форма и она инкапсулирует все остальные формы. Главная форма создает при необходимости экземплЯры других форм

Теперь применительно к твоей задаче:
Есть две формы Form1 и Form2. Для ясности переименуем Form1 в FormMain

Имеем следующий класс FormMain (код урезан):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
public class FormMain : System.Windows.Forms.Form
{
	private System.ComponentModel.Container components = null;
	public FormMain()
	{
		InitializeComponent();


		// создаем Form2
		frmForm2 = new Form2(treeView1);
		// покажем frmForm2. Можно показывать не только отсюда... По кнопке, по нажатию на меню и т. д.
		frmForm2.Show();
		//
		
	}

	static void Main() 
	{
		// При запуске создаем только одну форму (главную)
		Application.Run(new FormMain());
	}

	// Имеем еще и дерево в этой же форме
	private System.Windows.Forms.TreeView treeView1;

	// Инкапсулируем еще и Form2
	private Form2 frmForm2;

}


А теперь возьмемся за Form2
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
public class Form2 : System.Windows.Forms.Form
{

		// Из этой формы, как я понимаю, нам нужен доступ к дереву
		// главной формы. Для этого мы запомним в этой форме объект
		// дерево главной формы.
		// С этой целью можно как вариант прегрузить конструктор
		

		private TreeView ParentTree; // это дерево главной формы

		// Перегрузим конструктор 
		public Form2(TreeView tree)
		{
			InitializeComponent();

			ParentTree = tree; // Запомним дерево
		}

		// Это конструктор по умолчанию 
		public Form2()
		{
			InitializeComponent();

		}



		
}

и дальше можно юзать дерево заполненное в главной форме из Form2 используя ParentTree
...
Рейтинг: 0 / 0
08.12.2004, 17:39
    #32819339
Gasanov2003
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать текст выбранного нода из другой формы.
А еще главное не забыть заполнить дерево. Это можно сделать в конструкторе главной формы.
Скорректированная версия конструктора
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
public FormMain()
{
	InitializeComponent();

             //
             // Здесь заполним дерево
             //

	// создаем Form2
	frmForm2 = new Form2(treeView1);
	// покажем frmForm2. Можно показывать не только отсюда... По кнопке, по нажатию на меню и т. д.
	frmForm2.Show();
	//
		
}
...
Рейтинг: 0 / 0
08.12.2004, 19:45
    #32819558
Vladimir Voloshin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать текст выбранного нода из другой формы.
если у тебя вторая форма открываетсся из первой при при клике на menuitems contexmenu, то передавай этой форме текст из нода, или еще что-то

Код: plaintext
1.
2.
3.
4.
5.
private void menuItem1_Click(object sender, System.EventArgs e)
{
Form2 frm2 = new Form2(tvw.SelectedNode.Text);
frm2.Show();
}

и в конструкторе Form2 делай с ним все что хош
...
Рейтинг: 0 / 0
09.12.2004, 08:14
    #32819819
nostra
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать текст выбранного нода из другой формы.
Всем огромное спасибо, очень поучительно.
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Узнать текст выбранного нода из другой формы. / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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