Перейти к содержимому

Как сделать переход на другую форму в c

  • автор:

Переход от одной формы к другой не работает?

Приветствую. Visual Studio не может найти 2 форму Windows Forms.
Перепробовал всё, не работает.
Есть у меня 2 формы Form1 Form2
5c49fd64375ff442224454.png
Решил поставить кнопку перехода с первой формы на вторую, не работает.
5c49fced126c0262851468.png

private void button1_Click(object sender, EventArgs e)

5c49fcc9b668d987795876.png

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

static void Main()
  • Вопрос задан более трёх лет назад
  • 1691 просмотр

6 комментариев

Простой 6 комментариев

Как сделать переход на другую форму в c

есть такой код, который создает динамически TextBox как я правильно понял его имя формируется как TB и цифра, вопрос в том как записать из этого динамического объекта введенный текст в Label2.Text. . уже второй день голову ломаю не знаю где пробел в моих знаниях.

Программист это не профессия, программист — это образ жизни.
Форумчанин
Регистрация: 15.10.2011
Сообщений: 139
Сообщение от Prizrak86

 this.Controls.Add(new TextBox() < Name = "TB" + i.ToString(), Location = new Point(2, label2.Location.Y + 15 + i * 24), Width = 200 >);

есть такой код, который создает динамически TextBox как я правильно понял его имя формируется как TB и цифра, вопрос в том как записать из этого динамического объекта введенный текст в Label2.Text. . уже второй день голову ломаю не знаю где пробел в моих знаниях.

разобрался с переносом данных из динамического TextBox

public partial class Form2 : Form < int i = 0; TextBox[] TB = new TextBox[100]; public Form2() < InitializeComponent(); button1.Location = new Point(button1.Location.X, button1.Location.Y + 24); button2.Location = new Point(button2.Location.X, button2.Location.Y + 24); TB[i] = new TextBox(); this.Controls.Add( TB[i]); TB[i].SetBounds(2, label2.Location.Y + 15 + i * 24, 200, 13); i++; >private void button1_Click(object sender, EventArgs e) < button1.Location = new Point(button1.Location.X, button1.Location.Y + 24); button2.Location = new Point(button2.Location.X, button2.Location.Y + 24); TB[i] = new TextBox(); this.Controls.Add(TB[i]); TB[i].SetBounds(2, label2.Location.Y + 15 + i * 24, 200, 13); i++; >private void button2_Click(object sender, EventArgs e) < string s=""; for (int j = 0; j < i; j++) < s += "\n" + TB[j].Text; >MessageBox.Show(s); > >

Программист это не профессия, программист — это образ жизни.

Как сделать переход на другую форму в 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

      © 2024 C++ Репeтитор | Уроки по программированию на С++ | C++ Уроки | Примеры программ С++

      Как открыть форму 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:07

      1 ответ 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 , и оно появится ровно по центру родительского окна.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *