Как открыть форму по кнопке c
При нажатии на кнопку Button, открываем из одной формы Form1, другую форму Form2.
Для Form1:
Unit1.cpp
#include #pragma hdrstop #include "Unit1.h" #include "Unit2.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) < >//--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) < // Form2->ShowModal(); Form2->Show(); >
Unit1.h
//--------------------------------------------------------------------------- #ifndef Unit1H #define Unit1H //--------------------------------------------------------------------------- #include #include #include #include //--------------------------------------------------------------------------- class TForm1 : public TForm < __published: // IDE-managed Components TButton *Button1; void __fastcall Button1Click(TObject *Sender); private: // User declarations public: // User declarations __fastcall TForm1(TComponent* Owner); >; //--------------------------------------------------------------------------- extern PACKAGE TForm1 *Form1; //--------------------------------------------------------------------------- #endif
Для Form2:
Unit2.cpp
#include #pragma hdrstop #include "Unit2.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm2 *Form2; //--------------------------------------------------------------------------- __fastcall TForm2::TForm2(TComponent* Owner) : TForm(Owner) < >//--------------------------------------------------------------------------- void __fastcall TForm2::Button1Click(TObject *Sender) < Form2->Close(); >
Unit2.h
#ifndef Unit2H #define Unit2H //--------------------------------------------------------------------------- #include #include #include #include //--------------------------------------------------------------------------- class TForm2 : public TForm < __published: // IDE-managed Components TButton *Button1; void __fastcall Button1Click(TObject *Sender); private: // User declarations public: // User declarations __fastcall TForm2(TComponent* Owner); >; //--------------------------------------------------------------------------- extern PACKAGE TForm2 *Form2; //--------------------------------------------------------------------------- #endif
- C++ Builder
- Button
- Form
- VCL Forms Application
- Windows Application
- Show
- Назад
- Вперёд
- Вы здесь:
- Главная
- Уроки и примеры по программированию С++

- Уроки и примеры программирование на C++ в Builder 6

- Из первой формы Form 1 открыть вторую форму Form2 | Программирование С++
Меню
- Главная
- Уроки и примеры по программированию С++
- Уроки и примеры программирование на C++ в Builder 6
- Уроки и примеры программирования на C++ в Embarcadero RAD Studio 10 | C++ Builder 10
- Примеры FireMonkey
- Примеры с аудио
- Примеры с видео
- Примеры Microsoft Excel
- Примеры Microsoft Word
- Примеры часов и таймеров
- Примеры с архивами
- Настройка C++ Builder 6
- Настройка Embarcadero RAD Studio 10 | C++ Builder 10
- Настройка Qt
© 2023 C++ Репeтитор | Уроки по программированию на С++ | C++ Уроки | Примеры программ С++
Как открыть форму по кнопке c
Чтобы добавить еще одну форму в проект, нажмем на имя проекта в окне Solution Explorer (Обозреватель решений) правой кнопкой мыши и выберем Add(Добавить)->Windows Form.

Дадим новой форме какое-нибудь имя, например, Form2.cs:

Итак, у нас в проект была добавлена вторая форма. Теперь попробуем осуществить взаимодействие между двумя формами. Допустим, первая форма по нажатию на кнопку будет вызывать вторую форму. Во-первых, добавим на первую форму Form1 кнопку и двойным щелчком по кнопке перейдем в файл кода. Итак, мы попадем в обработчик события нажатия кнопки, который создается по умолчанию после двойного щелчка по кнопке:
private void button1_Click(object sender, EventArgs e)
Теперь добавим в него код вызова второй формы. У нас вторая форма называется Form2, поэтому сначала мы создаем объект данного класса, а потом для его отображения на экране вызываем метод Show:
private void button1_Click(object sender, EventArgs e)
Теперь сделаем наоборот — чтобы вторая форма воздействовала на первую. Пока вторая форма не знает о существовании первой. Чтобы это исправить, надо второй форме как-то передать сведения о первой форме. Для этого воспользуемся передачей ссылки на форму в конструкторе.
Итак перейдем ко второй форме и перейдем к ее коду — нажмем правой кнопкой мыши на форму и выберем View Code (Просмотр кода). Пока он пустой и содержит только конструктор. Поскольку C# поддерживает перегрузку методов, то мы можем создать несколько методов и конструкторов с разными параметрами и в зависимости от ситуации вызывать один из них. Итак, изменим файл кода второй формы на следующий:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace HelloApp < public partial class Form2 : Form < public Form2() < InitializeComponent(); >public Form2(Form1 f) < InitializeComponent(); f.BackColor = Color.Yellow; >> >
Фактически мы только добавили здесь новый конструктор public Form2(Form1 f) , в котором мы получаем первую форму и устанавливаем ее фон в желтый цвет. Теперь перейдем к коду первой формы, где мы вызывали вторую форму и изменим его на следующий:
private void button1_Click(object sender, EventArgs e)
Поскольку в данном случае ключевое слово this представляет ссылку на текущий объект — объект Form1, то при создании второй формы она будет получать ее (ссылку) и через нее управлять первой формой.
Теперь после нажатия на кнопку у нас будет создана вторая форма, которая сразу изменит цвет первой формы.
Мы можем также создавать объекты и текущей формы:
private void button1_Click(object sender, EventArgs e)
При работе с несколькими формами надо учитывать, что одна из них является главной — которая запускается первой в файле Program.cs. Если у нас одновременно открыта куча форм, то при закрытии главной закрывается все приложение и вместе с ним все остальные формы.
Как открыть форму new. С#
Проблема: Я решил сделать интерфейс. Сбоку которого есть кнопочки. При нажатии на кнопочку исполняется код, который переключает на дочернею форму. При переходе на другую дочернею форму по нажатию кнопочки загружается форма, и если хочешь вернутся на прошлую дочернею форму, то эта форма загружается заново. Повышается потребление ОЗУ и пропадают ведённые данные. Вот кусок кода:
public void openChildForm(Form childForm, object btnSender) < if (activeForm != null) activeForm.Hide(); activeForm = childForm; childForm.TopLevel = false; childForm.FormBorderStyle = FormBorderStyle.None; childForm.Dock = DockStyle.Fill; panelChildForm.Controls.Add(childForm); panelChildForm.Tag = childForm; childForm.BringToFront(); childForm.Show(); >private void btnSettings_Click(object sender, EventArgs e)
Использовал hide и show, толку нет.
Отслеживать
задан 1 июн 2020 в 16:06
13 3 3 бронзовых знакаФорму чего? Укажите тег winforms или wpf, покажите код. Отредактируйте вопрос. Какие данные хотите сохранять, для чего? Искали ли вы решение, какие нашли варианты? Почему они вам не подошли? Пытались ли решить вопрос самостоятельно? Сейчас ваш вопрос похож на «у меня болит нога, как вылечить?».
1 июн 2020 в 16:15
Всё указал, теперь похоже на «Болит здесь, пробовал подорожник, не помогло, что делать?»
1 июн 2020 в 16:55
.NET Core или .NET Framework?
1 июн 2020 в 17:01
.NET Framework последней версии
1 июн 2020 в 17:071 ответ 1
Сортировка: Сброс на вариант по умолчанию
Так как сложно разобраться с тем, что вы натворили в коде, приведу отдельный пример, как один из способов реализовать окно настроек.
- В главном окне Form1 одна кнопка с именем button1 и названием Settings, заданным в дизайнере
- Дочернее окно Form2 будет вызываться как модальное, то есть будет блокировать доступ к основному окну, пока оно открыто
- Form2 содержит 3 контрола textBox1 , и 2 кнопки button1 OK, и button2 Cancel
Суть примера в том, что название главного окна можно поменять в окне настроек, сохранить или отменить сохранение настроек. При закрытии программы настроки сохраняются в XML файл settings.xml в каталоге с программой. При запуске программы соответственно оттуда загружаются, и если файла нет (например при первом запуске программы), то устанавливаются по умолчанию.
Класс настроек Settings.cs
[Serializable] public class Settings < // здесь и задам значение по умолчанию public string WindowName < get; set; >= "My Application"; >Далее, реализую окно настроек, при этом событие Form.Load в дизайнере привяжу к обработчику Form2_Load .
Далее на button1 я назначаю в дизайнере DialogResult.OK , на button2 — DialogResult.Cancel
Form2.cs
public partial class Form2 : Form < // публично доступное свойство с настройками public Settings Settings < get; set; >// никогда не вставляйте свой код в конструктор формы public Form2() < InitializeComponent(); >// гружу настройки в TextBox здесь private void Form2_Load(object sender, EventArgs e) < textBox1.Text = Settings.WindowName; >// А здесь записываю значение TextBox в настроки private void button1_Click(object sender, EventArgs e) < Settings.WindowName = textBox1.Text; >>Далее, главное окно Form1 . События Form.Load и Form.FormClosing привязываю с обработчикам Form1_Load и Form1_FormClosing соовтетственно.
Form1.cs
public partial class Form1 : Form < // путь к файлу с настройками private readonly string _settingsFilePath = Path.Combine(Application.StartupPath, "settings.xml"); // сами настройки, которые я буду хранить в классе главного окна private Settings _settings; public Form1() < InitializeComponent(); >// этот обработчик вызывается при запуске приложения private void Form1_Load(object sender, EventArgs e) < LoadSettings(); ApplySettings(); >// этот обработчик вызывается при закрытии приложения private void Form1_FormClosing(object sender, FormClosingEventArgs e) < SaveSettings(); >// загрузить настройки их XML файла private void LoadSettings() < // если файл есть if (File.Exists(_settingsFilePath)) < // гружу из него настройки XmlSerializer serializer = new XmlSerializer(typeof(Settings)); using (StreamReader sr = new StreamReader(_settingsFilePath)) < _settings = serializer.Deserialize(sr) as Settings; >> else < // если файла нет, просто создаю новые _settings = new Settings(); >> // сохранить настройки в XML файл private void SaveSettings() < XmlSerializer serializer = new XmlSerializer(typeof(Settings)); using (StreamWriter sw = new StreamWriter(_settingsFilePath)) < serializer.Serialize(sw, _settings); >> // применить настройки к окну private void ApplySettings() < Text = _settings.WindowName; >// кнопка Settings открывает окно настроек private void button1_Click(object sender, EventArgs e) < Form2 formSettings = new Form2 < Settings = _settings >; if (formSettings.ShowDialog(this) == DialogResult.OK) < _settings = formSettings.Settings; ApplySettings(); >> >Главный прикол состоит в том, что XmlSerializer сам превращает класс в XML файл (сериализует), и обратно (десереализует) автоматически.
Создайте этот пример у себя на базе нового Windows Forms приложения и потестируйте его. Окно настроек конечно создается заново каждый раз, но при закрытии оно корректно уничтожается (назначение DialogResult кнопке автоматически закрывает модальное окно, вызванное с помощью ShowDialog() ). Хранить в памяти только необходимые данные — дешевле и проще, чем целое окно.
К тому же ShowDialog() — это удобно. Например дочернему окну можно задать в дизайнере свойство StartPosition значение CenterParent , и оно появится ровно по центру родительского окна.
как из формы справочника по нажатию кнопки (Имя кнопки: Анкета) открыть форму документа?

Не устроил ответ?
Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.Реклама
Новые вакансии
- Вакансия «Прораммист/разработчи 1С» Екатеринбург от Денис Спеиалист
Вчера в 13:10 - Вакансия Стажер Аналитик от Elizavetashkr
17 ноября 2023 г. - Вакансия Стажер Программист 1С от Elizavetashkr
17 ноября 2023 г.
