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

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

01.08.2010, 16:36. Показов 113556. Ответов 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
Ответ Создать тему
Новые блоги и статьи
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Вот уже год прошел, как у меня домен в reg.ru ...
Etyuhibosecyu 16.04.2026
И ничего они мне не сделали. Если отвязать карту, никакие услуги они не навяжут. Я бы с радостью продлил еще на два года, чтобы не мучиться с временным доменом и меня уже знали по red-star-soft. com,. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru