Как открыть форму из другой формы?
есть главная форма, на ней кнопка открыть, есть 2 форма из нее сделана таблица, как открыть эту таблицу ? какой примерно должен быть код для кнопки ?
сразу скажу что давно с программированием не работал, не до эого было и изучал C++, сейчас нужно на C#
Добавлено через 10 минут
поиск ни к чему толковому не привел
Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Нельзя открыть форму с другой формы
Всем привет! Возникла такая вот проблема. Создаю проект и добавляю форму и когда пишу так .
Открыть дочернюю форму, из другой дочерней формы
Доброго времени суток! Значит ситуация такая. У меня есть родительская форма MDIContainer.
Как с пом@щью дочерней формы открыть форму у родительскую форму?
Привет Всем! 🙂 Вот я использую код KvartiraForm KvartiraForm = new KvartiraForm();.
Как передать данные из одной формы другой, если формы вызываються через MDI форму?
Я создал MDI форму для которой добавил две toolstrip button вызывающие форму1 и форму2 внутри MDI.
978 / 873 / 350
Регистрация: 26.04.2012
Сообщений: 2,647

Сообщение было отмечено tegami как решение
Решение
Ну создать объект второй формы и вызвать метод Show/ShowDialog, в зависимости от того, в каком режиме она должна быть открыта:
Form2 f2 = new Form2(); f2.Show();
Добавлено через 1 минуту
Сообщение от tegami 
Как войти в конструктор формы
Создал в VISUAL STUDIO 2015 Windows Form и написал код решения квадратного уравнения.
Закрыл а когда открыл не могу войти в форму. При этом создалось три файла
Form1.Designer.cs
Form1.resx
Form1.cs
Код вижу, а как зайти в форму?
Shift+F7 и обозреватель решений не помогают.
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Как связать формы для ввода логина и пароля с кнопкой войти
Итак, друзья, есть у меня два text.Box (login:password), как это все связать с кнопкой войти, что.
Как переоткрыть конструктор CLR формы
Добрый день! Помогите, пожалуйста, не могу никак вернуть конструктор формы. Создаю CLR пустой.

Как связать элементы формы и конструктор класса?
Доброго времени суток. Подскажите пожалуйста, вот у меня есть форма, на ней есть TextBox. как.
управление сложностью
1687 / 1300 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
Form1.Designer.cs
Администратор
![]()
16392 / 12871 / 5072
Регистрация: 17.03.2014
Сообщений: 26,183
Записей в блоге: 1
moland, ПКМ и View Designer тоже не работают? Если да, то попробуй сбросить настройки VS и перезапустить её.
Регистрация: 20.10.2017
Сообщений: 16
В обозревателе решений написано проектов 0. Может кто-либо на пальцах объсянить можно ли вернуть эту форму и как. Зайти туда-то поставить галочку там-то
Добавлено через 4 минуты
Я не знаю что это такое (ПКМ и View Designer).
Администратор
![]()
16392 / 12871 / 5072
Регистрация: 17.03.2014
Сообщений: 26,183
Записей в блоге: 1
moland, так это не форма пропала, а проект. Интересно где ты нажимал Shift+F7 в таком случае.
Если файлы проекта не были удалены, то нужно заново добавить проект в решение. Для начала посмотри есть ли рядом с решением папка проекта или его файлы. Ориентиром будет *.csproj файл. Если файлов нет, то значит ты переместил их куда-то (вспоминай куда) или удалил (тогда всё пропало шеф). Если файлы проекта есть, то выбери в контекстом меню решения «Add Existing Project».
Сообщение от moland 
Я не знаю что это такое (ПКМ и View Designer)
ПКМ = Правая Кнопка Мыши — или проще говоря контекстное меню.
View Designer это команда контекстного меню формы.
Как открыть форму для ввода дополнительных данных и узнать, выполнил ли пользователь действие?
Рассмотрим такую задачу. В процессе работы с формой нужно ввести некоторые дополнительные данные. Причем дальнейшая работа с программой должна быть невозможна до тех пор, пока пользователь не введет эти данные или пока он явно не откажется от ввода этих данных. При этом в вызывающем коде необходимо узнать результат дейтвий пользователя: он ввел данные или отказался от их ввода.
Для этих целей форма для ввода дополнительных данных открывается в модальном режиме . Это значит, что до тех пор, пока она не будет закрыта, дальнейшее выполнение кода на встроенном языке будет остановлено. В форме для ввода дополнительных данных используются стандартные команды формы. Таким образом, после того, как форма будет закрыта, исполнение кода продолжится и в вызывающем коде можно проанализировать, какой именно командой пользователь закрыл эту форму.
В качестве примера рассмотрим некоторую абстрактную обработку. Кроме основной формы, — Форма , — создадим у нее форму ПараметрыЗаполнения . Эта форма будет открываться модально из основной формы и возвращать коды стандартных команд.
В командную панель этой формы перенесем три стандартные команды: ОК , Пропустить , Отмена :

Форма ПараметрыЗаполнения после своего закрытия одной из этих стандартных команд вернет код возврата диалога, значения которого описаны в системном перечислении КодВозвратаДиалога .
Теперь, чтобы открыть форму ПараметрыЗаполнения модально, в основной форме нашей обработки выполним следующий код. Сначала откроем форму ПараметрыЗаполнения модально, а затем проанализируем возвращаемый результат:
Результат = ОткрытьФормуМодально("Обработка.ЗаполнениеДанных.Форма.ПараметрыЗаполнения");
Если Результат = КодВозвратаДиалога.ОК Тогда // Действия в случае ввода данных
ИначеЕсли Результат = КодВозвратаДиалога.Пропустить Тогда // Действия в случае пропуска экрана; например, переход к следующему шагу мастера
ИначеЕсли Результат = КодВозвратаДиалога.Отмена Тогда // Действия в случае отказа от ввода данных
Иначе // Действия во всех остальных случаях
Как открыть форму 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 , и оно появится ровно по центру родительского окна.