powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / из одной формы в другую
25 сообщений из 35, страница 1 из 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
25 сообщений из 35, страница 1 из 2
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / из одной формы в другую
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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