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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Правильное использоваие Show() и Hide() для форм, [VS2008] 
V
    Опции темы
DZeus
  Дата 30.4.2008, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 20.3.2008

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



Есть 2 формы LoginForm и MainForm в рамках одного Solution.

Задача: При запуске приложения показать LoginForm, а MainForm либо спрятать, либо сделать недоступной, ДО ТЕХ ПОР, пока юзер не залогинится. Как только логин прошёл успешно, прибить LoginForm, а MainForm сделать доступной.

Вопрос: How?
Пробовал способ отсюда - http://forum.vingrad.ru/topic-162099.html
но какое событие подобрать?

PM MAIL   Вверх
Walker
Дата 30.4.2008, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 363
Регистрация: 23.10.2006

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



В главном окне - подписываетесь на событие Load() или перекрываете OnLoad(). В нём - скрываете главное окно, создаёте экземпляр LoginForm и передаёте управление ей. Кстати сказать, метод формы ShowDialog имеет код возврата типа DialogResult. Воспользуйтесь этим - проверяйте его и в зависимости от значения продолжайте работу или уходите. В общем, что-то типа
Код

    public partial class MainForm : Form
    {
        public MainForm()
        {
            InitializeComponent();
        }

        private void MainForm_Load(object sender, EventArgs e)
        {
            this.Visible = false;
            LoginForm lf = new LoginForm();
            if (lf.ShowDialog() == DialogResult.OK)
                this.Visible = true;
            else
                Application.Exit();
        }
    }

В коде LoginForm - свобода действий. Например, набросьте кнопку Ок и выставьте её свойство DialogResult в OK. Затем проверяйте содержимое полей ввода при изменении в них текста и в зависимости от этого делайте доступной/недоступной эту кнопку. Либо проверяйте содержимое полей при нажатии на кнопку, и либо уничтожайте форму и возвращайте управление, либо выводите окно с сообщением о неверном пароле и оставайтесь в форме, либо завершайте приложение, либо что-то ещё.... В общем, для второго случая
Код

    public partial class LoginForm : Form
    {
        ...

        private void buttonOk_Click(object sender, EventArgs e)
        {
            // Проверка значения полей
            if (...)
            {
                this.DialogResult = DialogResult.OK;
                this.Close();
            }
            // Если проверка не прошла, делайте, что хотите.
        }
        
    }

Удачи!


--------------------
"От вчерашних побед остаётся усталость, если завтрашний день не сулит ничего..."
PM MAIL   Вверх
DZeus
Дата 30.4.2008, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 20.3.2008

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



Walker
Спасибо за совет, попоробовал Load отработать как вы предлагаете, однако при старте появились обе формы, причём MainForm в фокусе  smile 

Цитата(Walker @  30.4.2008,  10:55 Найти цитируемый пост)
В коде LoginForm - свобода действий. Например, набросьте кнопку Ок и выставьте её свойство DialogResult в OK. Затем проверяйте содержимое полей ввода при изменении в них текста и в зависимости от этого делайте доступной/недоступной эту кнопку. Либо проверяйте содержимое полей при нажатии на кнопку, и либо уничтожайте форму и возвращайте управление, либо выводите окно с сообщением о неверном пароле и оставайтесь в форме, либо завершайте приложение, либо что-то ещё.... В общем, для второго случая


LoginForm  у меня: 2 texBox (name и pwd) ну и собственно 2 button- а (ok, cancel)
и метод doLogin()

Код

 public void doLogin()
        {
           if (/*логин успешен*/)
                    {
                      _mainForm.Visible = true; // передаю по ссылке
                        Close();
                    }
                    else
                    { 
                        /*выругаться*/
                     }
        }





Это сообщение отредактировал(а) DZeus - 30.4.2008, 11:36
PM MAIL   Вверх
mr.DUDA
Дата 1.5.2008, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

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



У главной формы перекрыть метод SetVisibleCore и не вызывать base.SetVisibleCore до тех пор пока логин не пройдёт успешно. После этого показать главную форму (Show).


--------------------
user posted image
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

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


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

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


 




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


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

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