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

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

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

    Оче тупой вопрос, как я понимаю.
    Есть форма1, с тремя кнопками
    При нажатии на button1 должно открыться новое окно, где пользователь сможет добавлять строки в таблицу/не добавлять, если нажатие кнопки было случайным
    Пробовал через создание Form2 и открытии её при нажатии на кнопку, но чот не работает.

    Я так понимаю, сперва

    public partial class Form2 : Form < public basket() 

    Далее в действии после нажатия кнопки
    Form2.Load

    Но может есть иные пути?

    • Вопрос задан более трёх лет назад
    • 683 просмотра

    Вопрос по кнопке - Открыть форму.

    My Visual Database → Russian → Вопрос по кнопке - Открыть форму.

    Pages 1

    You must login or register to post a reply

    Posts: 6

    1 Topic by Astra30 2017-07-19 08:11:04

    Topic: Вопрос по кнопке - Открыть форму.

    Здравствуйте! Есть два вопроса:

    1. Почему, если первый раз открываешь "справочник" с помощью кнопки - "Открыть форму" данные таблиц заполняются, а если через процедуру:

    procedure Form1_Button1_OnClick (Sender: string; var Cancel: boolean);
    begin
    Form2.Show;
    Form2.PageControl1.ActivePageIndex := 2;
    end;

    , то таблицы пустые?
    Но, если открыть "справочник" кнопкой - "Открыть форму", то после этого и через процедуру данные таблицы начинают выводиться?
    Как сделать, что бы через при открытии через процедуру с первого раза выводились данные таблицы?

    2. Если открыть форму первый раз, то она появляется пустая, а если до этого вводил в неё данные, то в следующий раз она открывается с заполненными до этого данными? Как сделать что бы форма всегда открывалась пустая?

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

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