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

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

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

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

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


Так и не будет работать
Перепутано местами надо так :
this.label1.text="отображаемый текст";
this.ShowDialog();
...
Рейтинг: 0 / 0
22.07.2004, 12:15
    #32616610
wait
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
из одной формы в другую
а если это в цикле то тогда так что ли
while (1=1)
{
"отображаемый текст"=вычисления;
this.label1.text="отображаемый текст";
this.ShowDialog();
}
...
Рейтинг: 0 / 0
22.07.2004, 12:15
    #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
22.07.2004, 12:40
    #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
22.07.2004, 12:45
    #32616702
wait
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
из одной формы в другую
ok попробую
а это что такое (System.Windows.Forms.Application.DoEvents();) цикл событий какой то что ли
...
Рейтинг: 0 / 0
22.07.2004, 12:48
    #32616707
vooo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
из одной формы в другую
а это что такое (System.Windows.Forms.Application.DoEvents();) цикл событий какой то что ли

Processes all Windows messages currently in the message queue.
Подробнее - MSDN
...
Рейтинг: 0 / 0
22.07.2004, 13:34
    #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
22.07.2004, 14:08
    #32616918
Sirios
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
из одной формы в другую
Ну вы намутили ...
Полезли в обработчик событий, а он вам и на пса не сдался.

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

А this.Update() не забыли??? во второй форме как только результат выводите???
...
вывод результата;
this.Update();
...
...
Рейтинг: 0 / 0
22.07.2004, 14:19
    #32616943
wait
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
из одной формы в другую
я делал в цикле чтото типа с refresh(),но наверное обновлял контрол а не форму.
...
Рейтинг: 0 / 0
22.07.2004, 14:24
    #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
22.07.2004, 14:36
    #32616991
Magnus23
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
из одной формы в другую
SiriosНу вы намутили ...
Полезли в обработчик событий, а он вам и на пса не сдался.

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

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

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

2 wait
Может быть я не совсем верно понял вопрос. Прогресс выполнения процедуры в подчиненной форме должен быть виден на ней же или на основной? Мой вариант выводит прогресс на основной, думал это и нужно.
...
Рейтинг: 0 / 0
22.07.2004, 14:54
    #32617055
wait
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
из одной формы в другую
смысл такой стартует приложение, если с некоторым параметром типа "i"
то должна появится вторая форма поверх первой в ней запуститься процедура, результат (ход выполнения должен быть виден в подчинённой форме т.е. второй ) потом если все ок вторая форма т.е. подчиненная закрывается.
...
Рейтинг: 0 / 0
22.07.2004, 15:13
    #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
22.07.2004, 15:13
    #32617124
vooo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
из одной формы в другую
SiriosНу вы намутили ...
...

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

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

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

void Form2(Form1 fm1);

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

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


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

Да ладно, братан, без обид. Я сам только учусь, многих слушаю, читаю. А теперь я вижу у кого по делегатам можно консультироваться
...
Рейтинг: 0 / 0
22.07.2004, 16:23
    #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
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / из одной формы в другую / 25 сообщений из 35, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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