Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.99/531: Рейтинг темы: голосов - 531, средняя оценка - 4.99
644 / 198 / 5
Регистрация: 24.07.2010
Сообщений: 1,315

Открытие второй формы по нажатию на кнопку в первой

01.08.2010, 16:36. Показов 113273. Ответов 29
Метки нет (Все метки)

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

Добавлено через 9 минут
Откопал в каком то проекте:
просто в батоне нужном вписываешь
C#
1
2
Form2 dlg = new Form2();
dlg.Show(this);
где форм2 это название формы
Одна загвоздка, можно несколько раз нажимать на кнопку даже при открытом 2 окне и будут новые такие же вылезать)
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.08.2010, 16:36
Ответы с готовыми решениями:

Открытие второй формы по нажатию на кнопку
Не смог найти ответ на свой вопрос на форуме. В общем, есть первая форма и по нажатию кнопки на ней должна открываться вторая форма. Так...

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

Открытие второй формы по нажатию на кнопку
Здраствуйте. Создаю форму, добавляю кнопку. Хочу чтобы после нажатия на эту кнопку открывалась форма №2. Кстати как добавить правельно...

29
 Аватар для Pe4eNEG
123 / 123 / 12
Регистрация: 12.06.2010
Сообщений: 499
Записей в блоге: 2
01.08.2010, 20:22
я в Си не разбираюсь но может загвоздка то в слове new?
1
644 / 198 / 5
Регистрация: 24.07.2010
Сообщений: 1,315
01.08.2010, 20:23  [ТС]
Да, но как я понимаю без этого никак,объект то создать надо)
0
Videor venisse
128 / 109 / 6
Регистрация: 19.02.2010
Сообщений: 221
01.08.2010, 20:50
Попробуйте использовать функцию член класса ShowDialog().
В обработчике нажатия кнопки для вызова новой формы напишите типа:
C#
1
2
Имя_Namespace.Имя_Класса_формы form = new Имя_Namespace.Имя_Класса_формы();
form.ShowDialog();
Имя_Namespace это то пространство имён, в котором объявлен класс требуемой для вызова формы.
Если класс формы объявлен в каком-то дополнительном к проекту Namespace, то в самом начале файла (в котором нужно вызвать форму) необходимо включить этот Namespace типа:
C#
1
using Имя_Namespace;
3
 Аватар для Terion
271 / 203 / 13
Регистрация: 18.06.2010
Сообщений: 491
01.08.2010, 20:53
со словом new все в прорядке,это с#

что-т ничего не понятно, что же выхотите получить от открывающихся форм)

хотите просто 1 2ю форму? можно сделать это окно модальным. ну или сделать в кнопке проверку на уже существование 2ой формы
1
 Аватар для Dr.ShaX
16 / 16 / 1
Регистрация: 12.11.2008
Сообщений: 39
02.08.2010, 06:19
Sctipt ParentMain class (Form1)
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
...
publuc partial class Form1 : Forms
{
 
int counts;
 
public Form1()
{
InstalizeComponentts()
 
counts=0; // Child Windows count
 
}
...
 
public void Button1_Click(object sender,EventArgs e) // Button dlya otkrit Formu
{
 
Form2 newfrm=new Form2();
newfrm.Show();
counts++; // Opened forms count
}
If your second form dialog, than call method "newfrm.ShowDialog()" (return type DialogResult ) !!!
1
 Аватар для Фаршированный
17 / 17 / 2
Регистрация: 30.07.2010
Сообщений: 107
02.08.2010, 07:49
Лучший ответ Сообщение было отмечено как решение

Решение

Для начала необходимо поставить все точки над i т.е. прописать какая у тебя форма главная, а какая нет,для того чтобы главную форму определить главной прописываете вот что:
C#
1
2
3
4
5
        void ShowChildForm(Form form)
        {
            form.MdiParent = this;
            form.Show();
        }
для того чтобы определить дочернюю форму необходимо 2а раза кликнуть по вашей "главной" форме на которой будет кнопка (Но не по кнопке) у вас появится вот что:

C#
1
2
3
4
private void Spravochnik_Load(object sender, EventArgs e)
        {
            
        }
Spravochnik_Load - вместо этого будет ваше название, оно прописывается само.
в скобках вы прописываете вот что:
C#
1
2
fSecond form = new fSecond();
ShowChildForm(form);
fSecond - название вашей дочерней формы.

И теперь уже два раза кликайте по вашей кнопке появится:

C#
1
2
3
4
5
private void button1_Click(object sender, EventArgs e)
{
            fSecond form = new fSecond();
            ShowChildForm(form);
}
Ну вот теперь должна появляться ваша дочерняя форма при нажатии на кнопку на главной форме.

Добавлено через 3 минуты
для того чтобы определить дочернюю форму необходимо 2а раза кликнуть по вашей "главной" форме на которой будет кнопка (Но не по кнопке) у вас появится вот что:

C#
1
2
3
4
private void Spravochnik_Load(object sender, EventArgs e)
{
 
}
Spravochnik_Load - вместо этого будет ваше название, оно прописывается само.
в скобках вы прописываете вот что:

C#
1
2
fSecond form = new fSecond();
ShowChildForm(form);
fSecond - название вашей дочерней формы.



Извиняюсь вот это писать не нужно!!!!!
4
 Аватар для kirill29
2098 / 1263 / 173
Регистрация: 01.02.2009
Сообщений: 2,842
02.08.2010, 09:39
23Alex24, для начала - посмотрите эту тему: Ответы на 7 самых частых вопросов по WinForms
Если при работе со второй формой, доступ к первой не нужен, то, как уже писал
blazonic, проще всего использовать ShowDialog(); Пример:
C#
1
2
Form2 dlg = new Form2();
dlg.ShowDialog();
1
Заблокирован
02.08.2010, 10:39
В первой форме
C#
1
2
3
4
5
6
 Form2 dlg = new Form2();
        private void button1_Click(object sender, EventArgs e)
        {
           if (!dlg.Visible)           
            dlg.Show(this);
        }
Во второй
C#
1
2
3
4
5
6
7
8
9
10
private void Form2_FormClosing(object sender, FormClosingEventArgs e)
        {
            // определяем кто закрывает приложение
            if (e.CloseReason == CloseReason.UserClosing)
            {
                Hide();
                e.Cancel = true;
            }
 
        }
1
644 / 198 / 5
Регистрация: 24.07.2010
Сообщений: 1,315
02.08.2010, 11:06  [ТС]
В общем, люди, не нужно усложнять все и делать сами знаете через что))) Kirill29 - огромное спасибо, там действительно было то, что нужно, просто темы тяжело искать потому что если смотреть вручную их много, если вбивать в поиск, выходит много другого и не нужного)))
Вот самый нормальный вариант:
C#
1
2
3
4
5
6
private void button3_Click(object sender, EventArgs e)
        {
            Form2 f = new Form2(); 
            f.ShowDialog();
            
        }
Я думаю тему можно закрыть, огромное всем спасибо)
1
Заблокирован
02.08.2010, 12:00
Цитата Сообщение от 23Alex24 Посмотреть сообщение
Вот самый нормальный вариант:
Хотел бы заметить, что это для тебя самый нормальный вариант, в данном и конкретном случае.
Но если тебе вдруг захочется работать с двумя формами одновременно - открытие модальной формы тебе не подойдет.
1
644 / 198 / 5
Регистрация: 24.07.2010
Сообщений: 1,315
03.08.2010, 21:08  [ТС]
Вот значит какая проблемка, нужно из более поздней формы вытащить текст из текстбоксов в первую форму, на форуме нашел такую вот штуку?
2.3 Передача данных в конструктор Form2
Изменяем конструктор Form2

C#
1
2
3
4
5
6
7
8
public Form2(string data)
{
    InitializeComponent();
    //Обрабатываем данные
    //Или записываем их в поле
    this.data = data;
}
string data;
А создаем форму в любом месте Form1 так:

C#
1
2
3
Form2 f = new Form2(this.textBox1.Text);
f.ShowDialog();
//Или f.Show();

+ Простой в реализации способ
+ Не нарушает ООП
- Возможна передача только из более ранней формы в более позднюю


Этот вариант мне подходит, но почему то это у меня не работает, подскажите как надо сделать

Добавлено через 18 минут
точней я не пойму как мне из определенного( х) текстбоксов вытащить текст и вставить в какую нить переменную из первого окна
0
 Аватар для FireOwl
62 / 44 / 14
Регистрация: 01.07.2009
Сообщений: 145
03.08.2010, 21:31
Цитата Сообщение от 23Alex24 Посмотреть сообщение
нужно из более поздней формы вытащить текст из текстбоксов в первую форму
Цитата Сообщение от 23Alex24 Посмотреть сообщение
- Возможна передача только из более ранней формы в более позднюю
Как раз таки не подходит.

А в чем проблема? Ведь вторая форма создается в первой. А это значит, что к любому ее текстбоксу можно легко обратиться:
C#
1
2
3
Form2 f2=new Form2();
...
string x=f2.textBox1.Text;
1
644 / 198 / 5
Регистрация: 24.07.2010
Сообщений: 1,315
03.08.2010, 21:35  [ТС]
Загнался, ну все равно не работает, в форм 1 сделал так:

C#
1
2
3
Form2 dlg = new Form2();
            dlg.Show(this);
            string s = dlg.F_search.Text;
Ошибку выдает, и вообще при нажатии точки после длг он не видит текстбоксы
0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
03.08.2010, 22:58
Цитата Сообщение от 23Alex24 Посмотреть сообщение
и вообще при нажатии точки после длг он не видит текстбоксы
наверное потому что они через private закрыты. Можно им public присоить, тогда они (текстбоксы) будут видны из другого класса, но это "кривой" способ, правильнее сделать открытые свойства дающие доступ к свойству textBox.Text
1
 Аватар для Terion
271 / 203 / 13
Регистрация: 18.06.2010
Сообщений: 491
03.08.2010, 23:28
Цитата Сообщение от 23Alex24 Посмотреть сообщение
Загнался, ну все равно не работает, в форм 1 сделал так:

C#
1
2
3
Form2 dlg = new Form2();
            dlg.Show(this);
            string s = dlg.F_search.Text;
Ошибку выдает, и вообще при нажатии точки после длг он не видит текстбоксы
Цитата Сообщение от FireOwl Посмотреть сообщение
Ведь вторая форма создается в первой. А это значит, что к любому ее текстбоксу можно легко обратиться:
в корне нет. так,как вы вызываете 2ю форму, ничего и не обязано быть доступным.появятся после точки только, если вы сделаете контролы публичными, но это плохо и так делать не надо.способы, описанные в той теме, по большей части относятся к передаче из формы 1 в 2,а вам надо наоборот, насколько я поняла. используйте делегаты для обратной передачи.
1
644 / 198 / 5
Регистрация: 24.07.2010
Сообщений: 1,315
04.08.2010, 08:41  [ТС]
Народ, я если честно толком не парю че как делать, поэтому и прошу помощи, нужно из второй формы взять инфу из текстбоксов и перегнать ее в первую форму, а уж в первой форме я сам там буду мудрить с этой инфой)Плиз напишите код который мне даст такую возможность
0
 Аватар для kirill29
2098 / 1263 / 173
Регистрация: 01.02.2009
Сообщений: 2,842
04.08.2010, 09:03
Самый простой, но не самый лучший:
Форма 1:
C#
1
2
3
4
5
6
7
8
9
private void button1_Click(object sender, EventArgs e)
        {
            Form2 f = new Form2();
            if(f.ShowDialog() == DialogResult.OK)
            {
                textBox1.Text = f.GetTextBox1();
                textBox2.Text = f.GetTextBox2();
            }
        }
Форма 2:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
 
namespace WindowsFormsApplication5
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            this.Close();
        }
 
        private void Form2_Load(object sender, EventArgs e)
        {
            button1.DialogResult = DialogResult.OK;
        }
 
        public string GetTextBox1() 
        {
            return textBox1.Text;
        }
 
        public string GetTextBox2() 
        {
            return textBox2.Text;
        }
    }
}
На форме 2 имеем одну кнопку и два текстбокса. У кнопки выставляем свойство DilogResult в значение OK. На форме 1 также кнопка и два текстбокса. Если результат ShowDialog() будет равен OK, то в текстбоксы на первой форме передаются значения тектсбоксов второй формы.
1
644 / 198 / 5
Регистрация: 24.07.2010
Сообщений: 1,315
04.08.2010, 09:15  [ТС]
Иииииху)))) получилось))) спасибо огромное)))

Добавлено через 3 минуты
А Какие минусы у этого способа?
0
 Аватар для kirill29
2098 / 1263 / 173
Регистрация: 01.02.2009
Сообщений: 2,842
04.08.2010, 09:36
Цитата Сообщение от 23Alex24 Посмотреть сообщение
А Какие минусы у этого способа?
Ну, во-первых передача только в одну сторону (из 2 в 1), во-вторых форма должна быть открыта с помощью ShowDialog(). Но если данная форма точно будет нужна только для передачи значений в первую форму, то данного способа вполне достаточно.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.08.2010, 09:36
Помогаю со студенческими работами здесь

Открытие (окна) второй формы всегда по центру относительно первой (формы)
Форма №1 - основное окно программы (можно свободно перемещать по экрану). Форма №2 - окно настроек (в нем можно что-то изменить и закрыть;...

Открытие первой формы из второй
Всем здравствуйте. Как открывать вторую форму из первой я разобрался. А как вторую закрывать и при этом опять показывать первую - пока не...

Загрузка второй формы по нажатию кнопки в первой
Приведите пример кода где при нажатии клавиши первой формы возникает вторая форма ( первая при этом закрывается) p.s. Чтоб все переменные...

Открытие формы по нажатию на кнопку на другой форме
Здравствуйте. Подскажите, как я могу создать новую форму на Form1, а отобразить ее по нажатию на кнопку на добавленном мной юзер контроле?

Многоразовое открытие Второй формы с передачей параметров из первой
Чтобы открыть вторую форму через кнопку всем понятно: int kig=1; String ippl = new String; Form2 frm2 = new Form2(kig, ippl); ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru