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

Как открыть код формы в c

  • автор:

Пример. Отладка в Windows Forms

Область применения:yesVisual Studio Visual Studio для Mac noVisual Studio Code no

Форма Windows Forms — один из наиболее распространенных вариантов управляемых приложений. На основе формы Windows Forms создается стандартное приложение Windows. Можно реализовать данный примере на Visual Basic, C# или C++.

Для начала необходимо закрыть и открыть решения.

Чтобы подготовиться к выполнению данного пошагового руководства

  • Если какое–либо решение уже открыто, закройте его. (В меню Файл выберите команду Закрыть решение.)

Создание новой формы Windows Forms.

Далее нам предстоит создать новую форму Windows Forms.

Чтобы создать форму Windows Forms для данного примера
  1. В меню Файл последовательно выберите пункты Создать и Проект. Откроется диалоговое окно Создание проекта .
  2. В области «Типы проектов» разверните узел Visual Basic, Visual C# или Visual C++, затем
    1. для Visual Basic или Visual C# выберите Классическое приложение Windows>Приложение Windows Form.
    2. Для Visual C++ выберите Классическое приложение Windows.
    textBox1.Text = "Button was clicked!"; 
    textBox1.Text = "Button was clicked!" 
    textBox1->Text = "Button was clicked!"; 

    Отладка формы

    Теперь все готово для того, чтобы начать отладку.

    Чтобы выполнить отладку формы Windows Forms, созданной для данного примера
    1. В окне исходного кода щелкните левое поле на той же строке, в которую добавляется текст:
    textBox1.Text = "Button was clicked!"; 
    textBox1.Text = "Button was clicked!" 
    textBox1->Text = "Button was clicked!"; 

    Появится красная точка, и текст строки будет выделен красным цветом. Красная точка представляет точку останова. Дополнительные сведения см. в разделе Точки останова. Если приложение запускается из отладчика, выполнение этого приложения будет приостановлено отладчиком на строке с помеченным кодом. После этого можно просмотреть состояние приложения и произвести его отладку.

    Можно также щелкнуть правкой кнопкой мыши любую строку кода, выбрать пункт Точка останова, затем щелкнуть Вставить точку останова, чтобы добавить точку останова в эту строку.

    Присоединение к приложению Windows Form для отладки

    В Visual Studio вы можете подключить отладчик к выполняющемуся процессу. Если используется экспресс-выпуск, эта функция не поддерживается.

    Присоединение к приложению Windows Form для отладки

    В созданном ранее проекте щелкните левое поле, чтобы еще раз установить точка останова на добавленной строке:

    textBox1.Text = "Button was clicked!" 
    textBox1.Text = "Button was clicked!"; 
    textBox1->Text = "Button was clicked!"; 

    Связанный контент

    • Отладка управляемого кода
    • Безопасность отладчика

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

    Как открыть и закрыть форму из другой формы в C# (правильное решение)

    Как открыть и закрыть форму из другой формы в C# (правильное решение)

    C# изучаю не так давно и встала передо мной недавно задача:
    — открыть Form2 при нажатии на кнопку в Form1;
    — спрятать Form1;
    — открыть Form1 при закрытии Form2.
    На первый взгляд задача показалась элементарной, но… возникли нюансы — при закрытии приложения оно не выгружалось и в диспетчере задач мы наблюдали его работу, хотя визуально оно как бы закрылось.

    В чём же причина такого поведения? Об этом расскажу дальше. Рассмотрим открытие и закрытие форм на примерах.

    Открываем и закрываем форму из другой формы

    У нас в приложении есть две формы Form1 — главная, которая открывается сразу при запуске приложения и Form2, которую открываем по нажатию на кнопку.

    Чтобы открыть Form2 нам необходим следующий код, который будет срабатывать при нажатии на кнопку:

    private void button1_Click(object sender, EventArgs e)

    Теперь у нас открылась Form2 и спряталась Form1. Поработав с Form2 мы её закрываем и при этом нам надо после этого отобразить Form1. Многие начинающие, включая меня начинают писать следующий код, который помещаем в событие, которое происходит после закрытия Form2:

    private void Form2_FormClosed(object sender, FormClosedEventArgs e)

    Вроде всё логично: Form2 закрылась, Form1 открылась. Однако используя этот метод, мы можем заметить, что после того как мы закрываем приложение оно продолжает висеть в памяти. Многие, не зная почему это происходит дописывают в метод «Form1_FormClosed» дописывают принудительное закрытие приложения:

    Application.Exit();

    Это работает, однако правильно ли это? Решать вам.

    А теперь ответим на вопрос «почему приложение висит в памяти» и рассмотрим простое и правильное решение.

    Первая часть кода: мы отображаем Form2 и скрываем Form1. Не закрываем, а именно скрываем, т.е. экземпляр Form1 продолжает существовать.

    Закрыть Form1 вместо скрытия не получится, так как это главная форма приложения и при её закрытии мы закроем всё приложение.

    Вторая часть кода: строкой «Form ifrm = new Form1();» мы создаём второй экземпляр Form1 и далее его и отображаем, а первый экземпляр Form1 продолжает жить в памяти. И когда мы закрываем приложение (Form1), то первый экземпляр при этом не закрываем он так и «сидит» в памяти, поэтому приложение не выгружается из памяти. В связи с этим многие и закрывают принудительно приложение при закрытии главной формы (Form1).

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

    private void Form2_FormClosed(object sender, FormClosedEventArgs e)

    OpenForms — получает коллекцию открытых форм приложения. В нашем случае мы сразу обратились к главной форме приложения (OpenForms[0]).

    Теперь при закрытии Form2 у нас будет вызываться и отображаться та форма, которая породила закрывающуюся.

    Учитываем координаты форм при открытии

    Представьте ситуацию. Открыта Form1 вы её перемещаете в правый верхний угол экрана. Потом нажимаете на кнопку и… Form2 открывается по центру экрана или в другом месте, но не в том месте, где была Form1. Многие улыбнуться и скажут, что в свойствах Form2 надо прописать/указать следующее «StartPosition -> CenterParent» и открывать Form2 следующим методом:

    Form ifrm = new Form2(); ifrm.ShowDialog();

    Это правильное решение, которое всегда будет открывать Form2 поверх Form1 и всегда по центру Form1. Однако этот код не применим, если вам надо скрывать Form1, так как Form1 не будет скрываться.

    Сейчас приведу полное решение, которое позволит открывать Form1 и Form2 в той же точке, где находилась до этого форма, вызывающая другую форму. Код включает всё вышеописанное. В свойствах форм надо прописать следующее (прямо в студии выбираете эти значения):

    — свойство Form1: «StartPosition -> CenterScreen»
    — свойство Form2: «StartPosition -> Manual»

    Открыть и закрыть форму из другой формы в C# (правильное решение)

    private void button1_Click(object sender, EventArgs e)
    private void Form2_FormClosed(object sender, FormClosedEventArgs e)

    Теперь вы не создаёте второго экземпляра Form1 и приложение всегда будет закрываться, не оставаясь в памяти.

    Открываем форму поверх другой формы, как модальное окно

    Чтобы открыть Form2 поверх Form1, как модальное окно, не скрывая Form1, вам хватит этого кода:

    private void button1_Click(object sender, EventArgs e)

    В итоге Form2 будет открыта поверх Form1. В этом случае пользователь не сможет переключиться на Form1 не закрыв Form2.

    Как увеличить яркость в игре Doom 4 (2016)

    Предыдущая запись

    Как создать генератор паролей на C#

    Следующая запись

    Отличная статья, как раз решило мою идентичную проблему, автору удачи в дальнейшем и спасибо за помощь.

    вроде стать о том как с одной формы закрыть другу?! причем тут скрытие/закрытие первой открытия второй и на оборот.

    Как открыть код формы в 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 | Программирование С++

    Меню

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

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