Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Закрытие диалога, FormClosing 
:(
    Опции темы
PaZ1T1V
Дата 6.1.2010, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 169
Регистрация: 26.2.2008
Где: Багдад )

Репутация: нет
Всего: нет



Доброго времени суток, у меня возникла такая проблема:
есть SDI WinForms приложение, есть главная форма MainForm, есть вторая форма, открывается как дочерняя, но, в нее передается ссылка на родительскую форму:

Код



        MainForm form;
        public LoginForm(MainForm form)
        {
            InitializeComponent();
            this.form = form;
        }



дочерняя форма открывается с главной, как диалог:

Код


         LoginForm frm = new LoginForm(this);
         frm.ShowDialog();        



при нажатии на закрытие дочерней формы - [X], обрабатывается Form_Closing в дочерней форме, какие то значения меняются на главной форме, но после обработки этих данных форма как бы закрывается и открывается снова, я пробовал обрабатывать DialogResult, ничего не изменилось, подскажите как быть, а вот, собственно и код:

private void LoginForm_FormClosing(object sender, FormClosingEventArgs e)
        {
            if(this.DialogResult == DialogResult.Cancel)               
            {
                e.Cancel = true;
                this.Hide();
            }
        }

--------------------
[size=8]Atention please!!![/size]
[size=6]Кривые руки[/size]
PM MAIL WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
jonie
Дата 6.1.2010, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 5
Всего: 118



Цитата

Код

private void LoginForm_FormClosing(object sender, FormClosingEventArgs e)
        {
            if(this.DialogResult == DialogResult.Cancel)               
            {
                e.Cancel = true;
                this.Hide();
            }
        }

а вас не напрягает, что дочерняя форма будет недоступна, в случае выполнения кода в IF, при этом родительская форма будет заблокирована в методе ShowDialog() ?


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Экскалупатор
Дата 6.1.2010, 13:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 2
Всего: 24



Код

 this.Hide();

зачем эта строка? ты ж вроде закрывать хотел, а не прятать?
PM MAIL ICQ   Вверх
PaZ1T1V
Дата 6.1.2010, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 169
Регистрация: 26.2.2008
Где: Багдад )

Репутация: нет
Всего: нет



хорошо, да, не правильно пишу, сам понимаю, скажите как правильно это сделать...
--------------------
[size=8]Atention please!!![/size]
[size=6]Кривые руки[/size]
PM MAIL WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Экскалупатор
Дата 6.1.2010, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 2
Всего: 24



Код

this.Close();


Добавлено через 2 минуты
если честно вообще вот это не понимаю:
Код

private void LoginForm_FormClosing(object sender, FormClosingEventArgs e)
        {
            if(this.DialogResult == DialogResult.Cancel)               
            {
                e.Cancel = true;
                this.Hide();
            }
        }



объясни что ты пытаешься тут сделать?

Добавлено через 3 минуты и 1 секунду
если ты пытаешься обработать DialogResult то его надо обрабатывать не в дочерней форме, а в форме которая этот диалог создала.

Добавлено через 3 минуты и 59 секунд
такое ощущение что у тебя в обоих формах жуткая каша. 
PM MAIL ICQ   Вверх
PaZ1T1V
Дата 6.1.2010, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 169
Регистрация: 26.2.2008
Где: Багдад )

Репутация: нет
Всего: нет



на this.Close() вылетает исключение, помоему все как нормально: родительская форма
Код

  private void button1_Click(object sender, EventArgs e)
        {
            LoginForm form = new LoginForm(this);            
            form.ShowDialog();
        }  


Дочерняя фома
конструктор
Код

 MainForm form;
        public LoginForm(MainForm form)
        {
            InitializeComponent();
            this.form = form;
        }

обработчик закрытия (немного переделал)

Код

 private void LoginForm_FormClosing(object sender, FormClosingEventArgs e)
        {
           this.form.labelText = "";
           this.form.checkState = CheckState.Unchecked;          
           this.Close() // исключение StackOverflowException     
                  
        }


видимо надо открывать просто Show  - в том же потоке...

жалко, я все же хотел диалогом форму эту сделать а не просто TopMost, именно диалогом, чтоб если не закрыл форму ничего другого в форме делать нельзя было.... но да ладно, если никак то никак

Это сообщение отредактировал(а) PaZ1T1V - 6.1.2010, 17:57
--------------------
[size=8]Atention please!!![/size]
[size=6]Кривые руки[/size]
PM MAIL WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Экскалупатор
Дата 6.1.2010, 20:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 2
Всего: 24



PaZ1T1V, что то у тебя напутано тут сильно. я все время так делал и все нормально работало. не понимаю зачем тебе нужен обработчик события закрытия формы.
PM MAIL ICQ   Вверх
kobra
Дата 7.1.2010, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 730
Регистрация: 15.6.2005
Где: Грузия, Тбилиси

Репутация: 1
Всего: 9



если правилно понимаю задачу, то подход не верный. логичнее делать так
Код

    static class Program
    {
        

        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            LoginForm loginForm = new LoginForm();
            if (loginForm.ShowDialog() == DialogResult.OK)
            {
                Application.Run(new MainForm());
            }
        }
    }

PM MAIL   Вверх
PaZ1T1V
Дата 7.1.2010, 18:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 169
Регистрация: 26.2.2008
Где: Багдад )

Репутация: нет
Всего: нет



to cobra  спасибо большое, я понял как сделать... 

ЗЫ по идее да, сначала надо залогиниться а потом работать smile 

Это сообщение отредактировал(а) PaZ1T1V - 7.1.2010, 19:08
--------------------
[size=8]Atention please!!![/size]
[size=6]Кривые руки[/size]
PM MAIL WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.0700 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.