powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / из одной формы в другую
35 сообщений из 35, показаны все 2 страниц
из одной формы в другую
    #32616486
wait
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Работа с Windows.Forms
хочется из первой формы открыть вторую из второй запустить процедуру и чтобы ход выполнения отображался в контроле на второй форме
(например обработано х - элементов)
если сделать так

Form2 f3=new Form2();
f3.ShowDialog();
f3. AutoImport();

форма появляется и процедура то же выполняется но вот ход выполнения не отображается на форме.
...
Рейтинг: 0 / 0
из одной формы в другую
    #32616509
vooo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если так:

Form2 f3=new Form2();
f3.AutoImport();

где

public class Form2 : System.Windows.Forms.Form
{
public void AutoImport()
{
/*some code here*/
this.ShowDialog();
}


}
???
...
Рейтинг: 0 / 0
из одной формы в другую
    #32616539
wait
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
пробовал вставлять внутрь
AutoImport()
{
this.ShowDialog();
//
}
та же петрушка
все равно на форме не отображается результаты
...
Рейтинг: 0 / 0
из одной формы в другую
    #32616558
Por
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Por
Гость
А как происходит вывод результатов выполнения? Может быть дело в самом выводе?
...
Рейтинг: 0 / 0
из одной формы в другую
    #32616567
wait
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
не знаю все дело в том что если запустить с кнопки на форме то все работает нормально,а если скажем удаленно то нет.
...
Рейтинг: 0 / 0
из одной формы в другую
    #32616570
vooo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О какизх резултаттах идет речь и где вы ставите в коде ShowDialog
В данном примере я бросил на форму лейбл, присвоил ему текст и в результате текст отобразился.

public void AutoImport()
{
label1.Text="SomeText";

this.ShowDialog();
}
...
Рейтинг: 0 / 0
из одной формы в другую
    #32616583
wait
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я понимаю так что сначала должна появиться форма потом запускается сам процесс скажем так и уже на этой форме должно происходить отображение

открытие второй формы из первой
Form2 f3=new Form2();
f3.AutoImport();

где

public class Form2 : System.Windows.Forms.Form
{
public void AutoImport()
{
/*some code here*/
this.ShowDialog();
this.label1.text=отображаемый текст.
}


}
я сейчас не могу проверить но вроде бы так тоже не работало.
...
Рейтинг: 0 / 0
из одной формы в другую
    #32616596
vooo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
this.ShowDialog();
this.label1.text=отображаемый текст.


Так и не будет работать
Перепутано местами надо так :
this.label1.text="отображаемый текст";
this.ShowDialog();
...
Рейтинг: 0 / 0
из одной формы в другую
    #32616610
wait
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а если это в цикле то тогда так что ли
while (1=1)
{
"отображаемый текст"=вычисления;
this.label1.text="отображаемый текст";
this.ShowDialog();
}
...
Рейтинг: 0 / 0
из одной формы в другую
    #32616612
Por
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Por
Гость
Думаю проблема в следующем:
в первом варианте, где
Код: plaintext
1.
2.
Form2 f3=new Form2();
f3.ShowDialog();
f3. AutoImport();
f3. AutoImport() не будет вызван до тех пор, пока f3.ShowDialog() не вернет DialogResult, а к этому времени форма уже закроется и весь вывод будет происходить в бэкграунде.

во втором варианте, где
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Form2 f3=new Form2();
f3.AutoImport();

public class Form2 : System.Windows.Forms.Form
{
public void AutoImport()
{
 /*some code here*/ 
this.ShowDialog();
}
}
Ход выполнения /*some code here*/ виден не будет, а будет видно только результат выполнения, т.к. форма еще не показана на экране.
Но если вывод не сохраняется на экране, то и показано не будет ничего.

Замени ShowDialog() на Show() и посмотри, как все будет работать, а потом в MSDN и изучать, изучать, изучать, как завещал... ну ты понял.
...
Рейтинг: 0 / 0
из одной формы в другую
    #32616692
vooo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А например так вас не устроит (имитация цикла):
public void AutoImport()
{

this.Show();
for(int i=0;i<1000;i++)
{
label1.Text="SomeText "+i.ToString();
System.Windows.Forms.Application.DoEvents();
}

//по желанию можно поставить this.Close();
}
...
Рейтинг: 0 / 0
из одной формы в другую
    #32616702
wait
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ok попробую
а это что такое (System.Windows.Forms.Application.DoEvents();) цикл событий какой то что ли
...
Рейтинг: 0 / 0
из одной формы в другую
    #32616707
vooo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а это что такое (System.Windows.Forms.Application.DoEvents();) цикл событий какой то что ли

Processes all Windows messages currently in the message queue.
Подробнее - MSDN
...
Рейтинг: 0 / 0
из одной формы в другую
    #32616837
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Метод которым я пользуюсь:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
//В общем пространтве имен обьявляем делегат

public delegate void DProgress(int progress);


//В классе поставщике событий обьявляем ивент

public event DProgress OnProgress;
//Вызываем его из рабочей процедуры по мере выполнения


Private void DoWork(){
for(int i= 0 <= 100 ;i++){
    OnProgress(i);
}
}

//В классе основной формы создаем экземпляр класса подчиненной и подписываемся на событие

ProgressWatcher.Onprogress += new DProgress(ShowProgress);

private void ShowProgress(int progress){
    label.text="Progress - " + progress;
}

Удачи.

Magnus
...
Рейтинг: 0 / 0
из одной формы в другую
    #32616918
Sirios
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вы намутили ...
Полезли в обработчик событий, а он вам и на пса не сдался.

ShowDialog() - выводит модальное окно, пока оно не закроется первая форма будет блокирована.
Все управление с этого момента передано во вторую форму. И все там работает приотлично - не понимаю как вы это пишете.

А this.Update() не забыли??? во второй форме как только результат выводите???
...
вывод результата;
this.Update();
...
...
Рейтинг: 0 / 0
из одной формы в другую
    #32616943
wait
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я делал в цикле чтото типа с refresh(),но наверное обновлял контрол а не форму.
...
Рейтинг: 0 / 0
из одной формы в другую
    #32616956
wait
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Magnus23Метод которым я пользуюсь:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
//В общем пространтве имен обьявляем делегат

public delegate void DProgress(int progress);


//В классе поставщике событий обьявляем ивент

public event DProgress OnProgress;
//Вызываем его из рабочей процедуры по мере выполнения


Private void DoWork(){
for(int i= 0 <= 100 ;i++){
    OnProgress(i);
}
}

//В классе основной формы создаем экземпляр класса подчиненной и подписываемся на событие

ProgressWatcher.Onprogress += new DProgress(ShowProgress);

private void ShowProgress(int progress){
    label.text="Progress - " + progress;
}

Удачи.

Magnus
не все понятно попробую этот вариант если с this.update не прокатит
...
Рейтинг: 0 / 0
из одной формы в другую
    #32616991
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiriosНу вы намутили ...
Полезли в обработчик событий, а он вам и на пса не сдался.

ShowDialog() - выводит модальное окно, пока оно не закроется первая форма будет блокирована.
Все управление с этого момента передано во вторую форму. И все там работает приотлично - не понимаю как вы это пишете.

А this.Update() не забыли??? во второй форме как только результат выводите???
...
вывод результата;
this.Update();
...

Что значит "намутили"? Стандартный метод передачи событий из одного класса другому.

2 wait
Может быть я не совсем верно понял вопрос. Прогресс выполнения процедуры в подчиненной форме должен быть виден на ней же или на основной? Мой вариант выводит прогресс на основной, думал это и нужно.
...
Рейтинг: 0 / 0
из одной формы в другую
    #32617055
wait
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
смысл такой стартует приложение, если с некоторым параметром типа "i"
то должна появится вторая форма поверх первой в ней запуститься процедура, результат (ход выполнения должен быть виден в подчинённой форме т.е. второй ) потом если все ок вторая форма т.е. подчиненная закрывается.
...
Рейтинг: 0 / 0
из одной формы в другую
    #32617121
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В таком случае достаточно будет в прпоцедуре проставить this.Refresh()
private void button1_Click(object sender, System.EventArgs e) {
Form2 f= new Form2();
f.Show();
}

private void work(){
for(int i=0;i<=1000000;i++){
this.Refresh();
label1.Text="Progress " + i;
}
}

private void Form2_Activated(object sender, System.EventArgs e) {
work();
}


Примерно так. Проверил.

Magnus
...
Рейтинг: 0 / 0
из одной формы в другую
    #32617124
vooo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiriosНу вы намутили ...
...

Никто не мутил!!!! Magnus23 показал объектный подход решения задачи для обновления основного окна
если не ставить Application.DoEvents() то ваше окно не будет принимать внешних событий до окончания цикла - попробуйте закомментировать эту строчку и например попытаться переместить окно.....

Вообщем, как правильно говорит member Sa [\B] каждое решение имеет право на жизнь, если оно удовлетворяет конечной задаче (возможно я не правильно цитирую , да простит меня автор этих строк :-)))))
...
Рейтинг: 0 / 0
из одной формы в другую
    #32617222
Sirios
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 vooo
А зачем второй форме принимать события во время выполнения процедуры (разве что экстренного закрытия)? Вопрос ведь, не в этом был.

А модальное окно - оно и есть модальное - сделало свое дело и закрылось и делегаты вооще не нужны, а если еще нужно во второй форме использовать процедуры первой, то в конструкторе

void Form2(Form1 fm1);

нужно получить ссылку на первую форму: Form2 f3 = new Form2(this);
и пожалуйста общайтесь с двумя, не смотря что первая заблокирована.

В случае с принятием событий во время выполнения процедуры, я согласен, но это другой вопрос.
...
Рейтинг: 0 / 0
из одной формы в другую
    #32617297
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Sirios
Да ладно уже меня пинать :)
Мне почему то показалось что прогресс нужен в первой форме, обычно подобные вопросы задаются именно в этом ключе. В своей-то форме проблем нет...


Magnus
...
Рейтинг: 0 / 0
из одной формы в другую
    #32617321
Sirios
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Magnus23

Да ладно, братан, без обид. Я сам только учусь, многих слушаю, читаю. А теперь я вижу у кого по делегатам можно консультироваться
...
Рейтинг: 0 / 0
из одной формы в другую
    #32617340
M234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Magnus23В своей-то форме проблем нет...

Magnus


Есть...

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
// это в форме1
private void button1_Click(object sender, System.EventArgs e)
{
	Form2 f2= new Form2();
	f2.ShowDialog();
             //f2.ShowDialog(); как вариант, это ничего не меняет.
}


// это в форме2
private void work()
{
	for(int i= 0 ;i<= 100000 ;i++)
	{
		System.Windows.Forms.Application.DoEvents();
		progressBar1.Value = i;
		if (progressBar1.Value == progressBar1.Maximum)
		{
			this.Close();
		}
	}
}

Если в форме2 в цикле стоит DoEvents(), то окно ведёт себя как самостоятельное и фокус гуляет где хочет в том числе можно и на форму1 уйти. А ведь по идее нельзя! ( f2.ShowDialog(); )
...
Рейтинг: 0 / 0
из одной формы в другую
    #32617562
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем Doevents? Я же говорю :this.Refresh();
Сам только что проверял. Прогресс чудно выводится.

Magnus
...
Рейтинг: 0 / 0
из одной формы в другую
    #32617633
M234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Magnus23А зачем Doevents? Я же говорю :this.Refresh();
Сам только что проверял. Прогресс чудно выводится.

Magnus

Вопервых совсем не чудно, а мелькает как сумашедший.
Во вторых дочерняя форма (форма2) виснит на время работы цикла.
...
Рейтинг: 0 / 0
из одной формы в другую
    #32617712
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мелькает? Так его что замедлить нужно? :)
Виснет оно и понятно. А что ты хочешь делать в это время? Если нужно разрешить еще какие то операции, то в принципе верным методом было бы, для этой долгой отстраненной процедуры, открыть отдельный тред и пусть в нем крутится. О завершении отрапортует событием.

Magnus
...
Рейтинг: 0 / 0
из одной формы в другую
    #32617828
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Внесу свои три копейки в общее дело :-)

1) refresh не нужен, будет сильно страдать производительность такого цикла, и как правильно заметил M234 форма 2 не будет принимать события во время цикла, и не хороший эффект напрочь убьет у пользователя желания запускать этот процесс следующий раз

2) можно обойдись и без multithreading

3) Обязательна должна быть возможность остановить длинный цикл, по крайне мере я всегда в начале нажимаю кнопку, а потом соображаю что запустил что то нехорошее, в общем "защита от дурака". Таким образом должна появиться кнопка "ОТМЕНИТЬ" на форме 2 .

Поэтому без System.Windows.Forms.Application.DoEvents не обойтись
M234
Если в форме2 в цикле стоит DoEvents(), то окно ведёт себя как самостоятельное и фокус гуляет где хочет в том числе можно и на форму1 уйти. А ведь по идее нельзя! ( f2.ShowDialog(); )

Я думаю надо дать форме нормально активироваться и запускать в Form2_Activated не длинный процесс work() , а таймер который срабатывает например через 0.1 секунду, запуская work и отрубая себя навсегда.
Тогда проблема должна быть решена: у нас будет модальная форма, возможность отменить длинный цикл, и сам выполняющийся длинный цикл.

Код: plaintext
 uid  =  S a
...
Рейтинг: 0 / 0
из одной формы в другую
    #32617987
M234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SaЯ думаю надо дать форме нормально активироваться и запускать в Form2_Activated не длинный процесс work() , а таймер который срабатывает например через 0.1 секунду, запуская work и отрубая себя навсегда.
Тогда проблема должна быть решена: у нас будет модальная форма, возможность отменить длинный цикл, и сам выполняющийся длинный цикл.

Код: plaintext
 uid  =  S a

Уважаемый Sa, код с таймером пожалуйста в студию !
...
Рейтинг: 0 / 0
из одной формы в другую
    #32617998
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну там же все вроде как тривиально, ладно сейчас накатаю.

Код: plaintext
 uid  =  S a
...
Рейтинг: 0 / 0
из одной формы в другую
    #32618017
M234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SaНу там же все вроде как тривиально, ладно сейчас накатаю.

Код: plaintext
 uid  =  S a

Да просто никогда с таймером не игрался, а в данный момент времени нет,
хотелось бы просто увидить примерчик, на всякий случай.
А случаи они же разные бывають :)
...
Рейтинг: 0 / 0
из одной формы в другую
    #32618031
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
См. прикрепленный файл.

Код: plaintext
 uid  =  S a
...
Рейтинг: 0 / 0
из одной формы в другую
    #32618252
M234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, это то, что надо.
...
Рейтинг: 0 / 0
из одной формы в другую
    #32618448
wait
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо всем кто ответил.Все получилось + почерпнул много интересного.
...
Рейтинг: 0 / 0
35 сообщений из 35, показаны все 2 страниц
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / из одной формы в другую
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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