Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > контрол из одной формы другой


Автор: Ramin 4.8.2006, 23:35
значит так есть два форма form1, form2
в форм1 есть кнопка и техтбох
нажымается на кнопку открывается форм2
в форм2 одна кнопка
на ОнКлик написал
Код

Form1 frm1 = new Form1();
frm1.textBox1.Text = "rrrrrrr";

в форм1 техтбохе не отображается слово rrrrrrr...тоесть ничего не пишется туда .. в дебаггере посмотрел что значение идет а на нём не показывается...

почему?

вот собственна проба проект!

Автор: NikotiN 5.8.2006, 08:05
потому как ты содёшь новый объект form1, а не обращаешься к уже созданному.

Автор: Ramin 5.8.2006, 08:16
Цитата(NikotiN @ 5.8.2006,  08:05)
потому как ты содёшь новый объект form1, а не обращаешься к уже созданному.

как обрашаться уже созданному обекту форм1

Автор: stab 5.8.2006, 08:50
в класс Form1 добавь статичсекое поле:

Код

public static Form1 FormInstance;


содержимое метода Main замени на:

Код

FormInstance = new Form1();
Application.Run(FormInstance);


во второй форме при клике делай:

Код

Form1.FormInstance.textBox1.Text = textBox1.Text;


чтобы всё сделать красиво, поищи по форуму про синглетоны или, как вариант, можешь создать глобальный статический класс или глобальный объект, где будешь хранить ссылки на все глобальные объекты (формы).

Автор: Ramin 5.8.2006, 09:13
Цитата(cully @ 5.8.2006,  08:50)
в класс Form1 добавь статичсекое поле:

Код

public static Form1 FormInstance;


содержимое метода Main замени на:

Код

FormInstance = new Form1();
Application.Run(FormInstance);


во второй форме при клике делай:

Код

Form1.FormInstance.textBox1.Text = textBox1.Text;


чтобы всё сделать красиво, поищи по форуму про синглетоны или, как вариант, можешь создать глобальный статический класс или глобальный объект, где будешь хранить ссылки на все глобальные объекты (формы).

Пасибо! одна прозба вот я дал маленкий солютион если не трудно тебя там создай глобальный объект, где будет хранится ссылки на все глобальные объекты ...  xnj dpzk z tuj rfr ghbvth!

Автор: stab 5.8.2006, 09:15
третий вариант. можно передавать ссылку на первую форму через конструктор второй формы. в Form2 добавь конструктор:

Код

public Form2(Form1 form): this()
{
  frm1 = form;
}


при клике:

Код

frm1.textBox1.Text = textBox1.Text;


создавай вторую форму в первой так:

Код

frm2 = new Form2(this);
frm2.Show();


кароче, учите мат. часть.  smile 

Автор: Ramin 5.8.2006, 22:16
нашёл такой вариант:
Код

((myform)Application.OpenForms["myform"]).textBox1.Text="asdddsad":


есть ешё один вопрос про компонентов:
мне нужна компонент аналогично на компонент DropDownButton но можно было добавлять на его items DateTimepicker .. тоесть на него можно добавлять Combobox но мне нужно DateTimepicker
может кто то встречал? или сам зделал!

Автор: Exception 6.8.2006, 10:01
Если быть совсем уж придирчивым, это нарушение инкапсуляции: принципа, что каждый класс (например, форма) должен полностью скрывать свою реализацию (то есть не должен иметь public-полей). Уж лучше объявить в форме свойство:
Код
public string TextBoxText
{
    get { return _myTextBox.Text; }
    set { myTextBox.Text = value; }
}
и обращаться только к нему.
P.S. Одна тема - один вопрос

Автор: mr.DUDA 6.8.2006, 10:38
Цитата(Ramin @  5.8.2006,  22:16 Найти цитируемый пост)
Application.OpenForms

(offtopic) Это специально для таких ленивых придумали, кто с ООП не дружит  smile 

Автор: Ramin 6.8.2006, 10:41
Цитата(mr.DUDA @ 6.8.2006,  10:38)
Цитата(Ramin @  5.8.2006,  22:16 Найти цитируемый пост)
Application.OpenForms

(offtopic) Это специально для таких ленивых придумали, кто с ООП не дружит  smile

а может быть минусы в таком обрашении?

Автор: mr.DUDA 6.8.2006, 11:57
Цитата(Ramin @  6.8.2006,  10:41 Найти цитируемый пост)
а может быть минусы в таком обрашении?

Потенциальные источники ошибок:

1) форма указывается по строковому имени, а не по ссылке на экземпляр, или хотя бы по типу
2) существование открытой формы в момент обращения к OpenForms не гарантировано

Обе ошибки трудноуловимы, и проявляются в run-time, а не на этапе компиляции.

Автор: Exception 6.8.2006, 12:08
Я предпочитаю создавать класс ApplicationManager с методом GetForm<T> where T : Form, возвращающим соответствующую форму из внутренней коллекции или создающим новую, если таковой не находится.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)