Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Формы в C#


Автор: valid 14.2.2010, 23:58
Здравствуйте!!!!!

Есть такая проблемка, имеются 3 формы(главная, первая и вторая).
На главной форме находятся две кнопки.
Одна кнопка должна открывать первую форму, закрывая главную, а вторая - вторую соответственно.

На первой форме расположены две кнопки, сохранить и отменить.
При нажатии на сохранить, главная форма должна появиться и закрыться первая.

Такой еще вопрос, как показать на экране две независимые формы?


Автор: Экскалупатор 15.2.2010, 00:22
Цитата(valid @  14.2.2010,  22:58 Найти цитируемый пост)
Одна кнопка должна открывать первую форму, закрывая главную, а вторая - вторую соответственно.

я так понимаю что первая форма это какой то вопрос? тогда может его просто открыть как ShowDialog()? тогда главная форма станет не доступна для пользователя пока он не закроет первую форму. соответственно в главной форме можно узнать что именно нажал пользователь и принять какие то меры. со второй формой можно сделать тоже самое.

а по поводу двух независимых форм я что то не совсем понял. объясните подробнее.

Автор: valid 15.2.2010, 00:25
нет, это не вопрос, нужно открыть другую независимую от главной формы форму. Независимую, в смысле, что можно с ними делать разные действия(скрывать, закрывать, открывать заново - независимо друг от друга)

Добавлено через 2 минуты и 9 секунд
кнопки сохранить и отменить я привел как пример. на первой форме могут находиться много других элементов

Автор: Экскалупатор 15.2.2010, 00:43
valid, сделай класс который будет открывать сначала одну форму, потом другую. а когда вторая закроется то что бы снова открывал первую.

Добавлено через 1 минуту и 27 секунд
т.е. надо сделать класс который будет управлять формами

Автор: valid 15.2.2010, 00:45
ммм, а как внутри одной формы запустить другую?

Автор: Экскалупатор 15.2.2010, 00:50
форма это такой же класс как и всякий другой. и работает почти так же. создаешь экземпляр этого класса и показываешь его.

Код

Form1 form = new Form1();
form.Show();

Автор: Miller_time 15.2.2010, 00:54
Form1 frm=new Form1(); //Запускает твою форму.

this.close(); //Закроет текущюю форму.

P.S. писал с мобильного, телефона за точность,не отвечаю

Автор: valid 15.2.2010, 01:28
спасибо, но тут опять же зависимость получается

нажимаем на кнопку AddTask
 
Код


        private void AddTask_Click(object sender, EventArgs e)
        {
            this.Hide();
            Form1 form = new Form1();
            form.Show();
        }



вот так сделать не получится.....
Код


        private void AddTask_Click(object sender, EventArgs e)
        {
            this.Close();
            Form1 form = new Form1();
            form.Show();
        }



и еще, на Form1 у нас кнопка, по нажатию, закрывается Form1 и открывается наша скрытая или закрытая форма

Автор: Экскалупатор 15.2.2010, 01:46
valid, я же вроде бы написал, сделай класс который будет тебе открывать и закрывать формы. и не будет никаких проблем.

Автор: valid 15.2.2010, 01:50
ммм, все, разобрался. Спасибо всем большое!!!

Автор: de_Nis 15.2.2010, 10:11
Цитата(valid @  15.2.2010,  00:50 Найти цитируемый пост)
ммм, все, разобрался.

valid, хорошим тоном на форуме является показ найденного решения. Решение полезно тем, кого интересует вопрос темы. К тому же в найденном решении, если его показать, более опытные форумчане могут найти ошибки или неточности. 

Автор: valid 15.2.2010, 10:19
Код


        private void AddTask_Click(object sender, EventArgs e)
        {
            this.Hide();
            Form2 form = new Form2();
            form.Show();
        }

        private void Add_Click(object sender, EventArgs e)
        {
            this.Close();
            Form1 form = new Form1();
            form.Show();
        }



я раньше не сидел на форумах, поэтому тонкостей не знаю....

Автор: Экскалупатор 15.2.2010, 10:33
valid, у тебя в итоге получается запущены 2 главные формы. потому что в
Код

 private void AddTask_Click(object sender, EventArgs e)
        {
            this.Hide();//прячешь НО НЕ ЗАКРЫВАЕШЬ
            Form2 form = new Form2();
            form.Show();
        }

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

 private void Add_Click(object sender, EventArgs e)
        {
            this.Close();
            Form1 form = new Form1();//вот тут создаешь НОВУЮ форму
            form.Show();
        }

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

Автор: valid 15.2.2010, 10:48
ммм, интересно, как это сделать?

Автор: Экскалупатор 15.2.2010, 11:08
Цитата(valid @  15.2.2010,  09:48 Найти цитируемый пост)
ммм, интересно, как это сделать? 

ну про это я уже два раза писал. но если сложно с классом. то самый простой способ это передать ссылку на главную форму в конструктор "первой"(использую названия из первого поста) формы. а потом работать с этой ссылкой.

Автор: valid 15.2.2010, 12:03
аа, я просто не понял о чем речь, ночь не спал =))....

Добавлено через 1 минуту и 35 секунд
у меня еще вопросик имеется, что то я нагуглить не смог.....

как заблокировать все что может закрыть фору...
то есть, крестик в правом верхнем углу, Alt + F4?

И еще, как отловить что форму закрыли?

Автор: KelTron 15.2.2010, 13:44
Код

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    // Запрещаем закрытие формы пользователем
    if (e.CloseReason == CloseReason.UserClosing)
    {
        e.Cancel = true;
    }
}

private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
    // Форма закрылась
}


Автор: valid 15.2.2010, 14:01
Вы знаете, не работает =(. скопировал Ваш код, изменил имя формы и ..... закрывается крестиком....

Автор: KelTron 15.2.2010, 14:11
Я думал догадаешься, что это обработчики событий. Их нужно подключить к событиям формы.

Автор: valid 15.2.2010, 14:16
я недавно только с формами и событиями начал работать.....

Добавлено через 55 секунд
как подключить к событиям формы??

Автор: KelTron 15.2.2010, 15:10
Если в коде то так:
Код

public Form1()
{
    InitializeComponent();
    this.FormClosing += Form1_FormClosing;
    this.FormClosed += Form1_FormClosed;
}

Вкладка Properties, сверху значёк в виде молнии, на него кликаешь, открывается список событий.
Новый обработчик генерируешь просто двойным щелчком, а если нужно подключить уже имеющийся (как в данном случае), то выбираешь из комбобокса.


Автор: valid 15.2.2010, 15:27
спасибо большое!!!!

Автор: valid 22.2.2010, 13:22
Появился еще вопросик, как сделать RichTextBox прозрачным, напрример, на 50%?

Автор: gambit 22.2.2010, 15:54
valid, 1. Даже закреплена тема про формы, где все разжевано.
2. Один топик один вопрос.

Автор: vitolena 12.5.2011, 19:47
Доброе время суто подскажите пожалуйста, есть уменя база на SQL  есть в ней таблица для регистраций регистрирую пользователей с клиента, код написан для вин приложения как сделать правельно чтоб с формы проверялась ауттификация для в хода и при этом для каждего пользователя откривалась опредёлёная форма подскажите плиз или сбросте пример очень надо помогите начанающему Зарание благобарю   smile   smile

Добавлено через 13 минут и 25 секунд
Доброе время суто подскажите пожалуйста, есть уменя база на SQL  есть в ней таблица для регистраций регистрирую пользователей с клиента, код написан для вин приложения как сделать правельно чтоб с формы проверялась ауттификация для в хода и при этом для каждего пользователя откривалась опредёлёная форма подскажите плиз или сбросте пример очень надо помогите начанающему Зарание благобарю        smile  smile 

Автор: Экскалупатор 12.5.2011, 23:07
особенно настраивает то что есть два одинаковых поста, которые отличаются смайликами, при чем в первом смайлик какой то замученный, а во второй уже на все согласный.... интересно на что...

а как у тебя проверяется авторизация пользователей? что вообще за приложение? что такое "база на SQL"? если по простому, то получай все данные и сверяй с тем что ввел пользователь. об остальном надо говорить про конкретное приложение, а не вообще, опиши а там посмотрим...


p.s. и влазить в чужие темы со своими вопросами, тем более которые не относятся к теме топика, совсем даже не комильфо... создай тему и там все будет обсуждаться.

Автор: vitolena 13.5.2011, 19:44
Извени если что не так первый раз на форуме вобще, а про приложение это типа каса тоесть есть менеджер и касиры чтоб  менеджер регестрировал касиров и у них через запрос в приложение была одна таблица а у менеджера регистрация вод цен и товара  и отчёт за месяц и каждый мог заходить под своим паролем  если мож помоч помоги плиз  или я могу выложить свой код мож по нём подскажешь или указать сообщение при отладлке какое ????  

Автор: Экскалупатор 13.5.2011, 21:55
vitolena, если в двух словах, то я бы делал так: реализовать все формы, создать класс, который хранит в себе коллекцию этих классов, когда пользователь запускает приложение то ему сначала показывают форму для выбора что он хочет загрузить(к примеру, выпадающий список со списком возможных вариантов загрузки), выбора/ввода логина и ввода пароля. потом, когда пользователь все это выбрал и ввел и нажал ОК, все эти данные передаются в класс, который решает какую именно форму из коллекции ему нужно запустить, и запускает эту форму, а если данные введенные пользователем не верны то выводит соответствующее сообщение. как то так я себе это представляю.

Автор: vitolena 13.5.2011, 23:39
да но  уменя не клас хронит колекцию а хранится всё в базе даных логен и пароль 

Автор: Экскалупатор 13.5.2011, 23:47
smile  smile  smile 
ну почему мне так не везет... давай с начала, у тебя есть разные должности, менеджеры и кассиры. что в программе отличает их друг от друга? наверное какой то различный функционал. что то могут делать менеджеры а что то кассиры. соответственно в твоей программе должен быть класс который будет проверять то что ввел пользователь(по описанной мной выше схеме) и в соответствии с результатом проверки что то показывать пользователю. либо тот интерфейс который нужен пользователю либо какое то сообщение что пользователь не имеет прав. я надеюсь это понятно? или ты опять скажешь что 
Цитата(vitolena @  13.5.2011,  22:39 Найти цитируемый пост)
а хранится всё в базе даных логен и пароль  

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

Добавлено через 2 минуты и 22 секунды
и все таки создай отдельную тему для своих вопросов...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)