Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.97/30: Рейтинг темы: голосов - 30, средняя оценка - 4.97
 Аватар для slenderface
9 / 9 / 5
Регистрация: 24.03.2014
Сообщений: 313

Открыть новую форму с именем из переменной

28.11.2014, 17:38. Показов 6630. Ответов 36
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Подскажите пожалуйста, как реализовать задуманное:
Есть строка(string)
string abc = "Form2";
Необходимо открыть новую форму по имени переменной:
C#
1
2
[строка abc] a = new [строка abc];
a.Show();
Заранее спасибо!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.11.2014, 17:38
Ответы с готовыми решениями:

Открыть новую форму
Здраствуйте. Вопрос. как открыть новую форму, из старой. Есть созданная форма, подключил в корень проэкта, по нажатию кнопки нужно чтобы...

Как открыть новую форму
Есть база данных (интернет-магазин) Регистрацию пользователей создал через форму. Но при открытии формы, любой пользователь может...

Как открыть новую форму?
Здравствуйте! Подскажите, пожалуйста, как открыть новую форму? Это форма была не создана, а добавлена из готового проекта!

36
 Аватар для slenderface
9 / 9 / 5
Регистрация: 24.03.2014
Сообщений: 313
02.12.2014, 16:16  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от insite2012 Посмотреть сообщение
Всего-навсего??? И из-за этого уже 19 постов в теме???)))))
бывает)) сейчас проверю)

Добавлено через 5 минут
insite2012, скажите пожалуйста, а обязательно через Dictionary, через переменную типа string не как?
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
02.12.2014, 16:20
Цитата Сообщение от slenderface Посмотреть сообщение
обязательно через Dictionary
Ну можно и через массивы, листы... Но тогда придется по каким-либо критериям вытаскивать из них нужную форму. А что не так с Dictionary? По-моему, все удобно, и ваше условие соблюдается.

Добавлено через 54 секунды
Dictionary используется всего лишь для жесткой привязки имени переменной к какой-либо форме.
1
 Аватар для slenderface
9 / 9 / 5
Регистрация: 24.03.2014
Сообщений: 313
02.12.2014, 16:25  [ТС]
insite2012, а как тогда из listbox добавить имя выбранного элемента в Dictionary, а потом извлечь и запустить то имя, которое получили только что в Dictionary?
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
02.12.2014, 16:27
Цитата Сообщение от slenderface Посмотреть сообщение
из listbox добавить имя выбранного элемента в Dictionary, а потом извлечь и запустить то имя, которое получили только что в Dictionary?
Не понял... Зачем добавлять, а потом извлекать?
Вы уточните задачу, все ваши мучения из-за того, что нечетко задаете вопрос, и непонятно, что же вы хотите получить...
0
 Аватар для slenderface
9 / 9 / 5
Регистрация: 24.03.2014
Сообщений: 313
02.12.2014, 17:01  [ТС]
Подробно опишу:
Есть форма. В ней есть listbox с элементами(итемс). Каждый итем имеет своё имя, которое = названию одной из форм(например Form 2, abcdForm и т.п.(имя формы не важно здесь)). При активации итема(клику по выбранному), я хочу открыть новую форму с таким имем самой формы(именем ее главного класса), которое извлекается из самого текста данного итема. т.е например, если в листбоксе есть итем с текстом = "Form2", то при активации открываем форму 2(Form2). при этом я знаю, что чтобы открыть new форму, обычно используем такой код(согласно теме 7 советов):
C#
1
Form2 = new Form2(); //дальше показываем ее и т.д.
Дык я хочу, чтобы если визуально представить строку Form2 = new Form2() - вместо Form2, открывалась форма с таким именем, которое = тексту выбранного итем, или заранее содержится в строчке string abc;
т.е примерно это можно представить себе так:
C#
1
2
[строка abc] a = new [строка abc];
a.Show();
Это должно быть реализовано как угодно, но главное чтобы в итоге мне показалась та форма, имя которой содержится в строке abc, или напрямую = тексту итема.
Если это строка abc, то ее текст я получаю так:
C#
1
string abc = lisbox1.SelectedItem.Text[0];
Добавлено через 5 минут
insite2012, возможно мне как то помочь? задолбался уже я просто. помогите пожалуйста!
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
02.12.2014, 17:26
Цитата Сообщение от slenderface Посмотреть сообщение
возможно мне как то помочь?
Возможно. Еще бы понять, что вы пытаетесь сделать)))
Может так пойдет?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
 
namespace FormsNames_Project {
    public partial class MainForm : Form {
        public MainForm() {
            InitializeComponent();
            listBox1.Items.AddRange(new[] { "Form_One", "Form_Two", "Form_Three", "Form_Four" });
            listBox1.SelectedValueChanged += new EventHandler(listBox1_SelectedValueChanged);
        }
 
        void listBox1_SelectedValueChanged(object sender, EventArgs e) {
            string formName = listBox1.SelectedItem.ToString();
            Form form = new Form { Text = formName };
            form.ShowDialog();
        }
    }
}
0
 Аватар для slenderface
9 / 9 / 5
Регистрация: 24.03.2014
Сообщений: 313
02.12.2014, 17:35  [ТС]
insite2012, простите пожалуйста, я не правильно написал, не листбокс, а листвиевс)
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
02.12.2014, 17:38
Цитата Сообщение от slenderface Посмотреть сообщение
не листбокс, а листвиевс)
А какая разница? Получите из него имя, присвойте его свойству Text новой формы и открывайте ее.
0
 Аватар для slenderface
9 / 9 / 5
Регистрация: 24.03.2014
Сообщений: 313
02.12.2014, 17:58  [ТС]
insite2012, хорошо, попробую.
0
18 / 18 / 4
Регистрация: 30.09.2013
Сообщений: 519
02.12.2014, 18:25
___
0
 Аватар для Metall_Version
2152 / 1289 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
02.12.2014, 18:59
insite2012, ты прикалываешься, мой ответ не видел ?
1
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
02.12.2014, 19:06
Цитата Сообщение от Metall_Version Посмотреть сообщение
ты прикалываешься
Metall_Version, блин, да уже вторую страницу переливаем из пустого в порожнее)))
0
 Аватар для Metall_Version
2152 / 1289 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
02.12.2014, 19:13
Цитата Сообщение от insite2012 Посмотреть сообщение
Metall_Version, блин, да уже вторую страницу переливаем из пустого в порожнее)))
ага
даже предлагал динамически тип создавать по его имени,
но ТС походу не вкуривает совсем, необходимо учить азы, чтобы понять что требуется сделать и как это делается...
1
 Аватар для Nalik
176 / 124 / 49
Регистрация: 30.11.2012
Сообщений: 1,330
15.08.2018, 22:07
Немного некропостинга. Код работает в случае если нужно создавать новую форму.
Кликните здесь для просмотра всего текста

Цитата Сообщение от insite2012 Посмотреть сообщение
Добавлено через 2 минуты
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
 
namespace ManyForms_Project {
    public partial class MainForm : Form {
        Dictionary<string, Form> formsDictionary;
        public MainForm() {
            InitializeComponent();
            formsDictionary = new Dictionary<string, Form>();
            formsDictionary.Add("FormOne", new Form() { Text = "FormOne" });
            formsDictionary.Add("FormTwo", new Form() { Text = "FormTwo" });
            formsDictionary.Add("FormThree", new Form() { Text = "FormThree" });
            formsDictionary.Add("FormFour", new Form() { Text = "FormFour" });
 
            listBox1.Items.AddRange(formsDictionary.Keys.ToArray());
            listBox1.SelectedValueChanged += new EventHandler(listBox1_SelectedValueChanged);
        }
 
        void listBox1_SelectedValueChanged(object sender, EventArgs e) {
            string key = listBox1.SelectedItem.ToString();
            Form f = formsDictionary[key];
            f.ShowDialog();
        }
    }
}


Но если форма уже создана как её открыть используя имя из переменной?
Делал сначала так:
C#
1
2
3
4
string nameForm = "form2"; //может принимать значения form1, form2, form3 и какие угодно
if(nameForm  == "form1") { form1 form1 = new form1(); form1 .ShowDialog(); } 
if(nameForm  == "form2") { form2 form2 = new form2(); form2 .ShowDialog(); } 
if(nameForm  == "form3") { form3 form3 = new form3(); form3.ShowDialog(); }
Но потом понял, что форм в проекте очень много и постоянно они добавляются и мне лень в ручную добавлять if-ы, case и прочие условия для такого открытия форм.

Постараюсь объяснить немного понятнее чем ТС.
У меня есть формы form1, form2, form3 и т.д на которых уже есть свои элементы, каждая форма уже имеет свой вид и отвечает за свои задачи. Откуда-то извне я получаю строку с названием формы которую нужно открыть и заношу её в переменную:
C#
1
string nameForm = "form2"; //к примеру form2
Теперь в переменной у меня есть название формы которую нужно открыть (кстати говоря название не обязательно должно быть form1, form2, form3, т.к. это лишь пример названия моих форм, так то они у меня более интуитивно понятным языком называются: user, profile и т.д., но думаю это понятно).
В общем теперь нужно открыть форму которая находится в переменной.

Подскажите пожалуйста как?)

Добавлено через 3 минуты
Цитата Сообщение от Metall_Version Посмотреть сообщение
это все делается проще, если нужно просто в зависимости от строки открыть ту или иную форму
Цитата Сообщение от Metall_Version Посмотреть сообщение
slenderface, самое простое использовать словарь
а без словаря как нибудь можно обойтись?)

Добавлено через 2 минуты
Прошу прощения невнимательно прочитал ответы в теме. Вот же он ответ.
Модераторы могут удалить это мои сообщения если посчитают нужным.
Цитата Сообщение от kontuPauk Посмотреть сообщение
Короче, я правильно понимаю, что Вам нужно?
C#
1
2
3
4
            Type myForm = Type.GetType("MyNamespace.Form2");
            ConstructorInfo constructor = myForm.GetConstructor(new Type[] { });
            Form form = (Form)constructor.Invoke(new object[] { });
            form.Show();
Добавлено через 24 минуты
Ааа нет, всё таки подскажите пожалуйста как открыть форму с параметрами из строки.
C#
1
2
3
4
5
Type myForm = Type.GetType("MyNamespace.Form2");
                        ConstructorInfo constructor = myForm.GetConstructor(new Type[] { });
                        Form form = (Form)constructor.Invoke(new object[] {  });
                        form.Show();
                        //Form2 Form2 = new Form2(true, "string"); //Form2 принимает 2 параметра bool и string
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18404 / 14336 / 5370
Регистрация: 17.03.2014
Сообщений: 29,020
Записей в блоге: 1
15.08.2018, 23:52
Цитата Сообщение от Nalik Посмотреть сообщение
Ааа нет, всё таки подскажите пожалуйста как открыть форму с параметрами из строки.
C#
1
2
3
4
Type myForm = Type.GetType("MyNamespace.Form2");
ConstructorInfo constructor = myForm.GetConstructor(new Type[] { typeof(bool), typeof(string) });
Form form = (Form)constructor.Invoke(new object[] { true, "string" });
form.Show();
1
 Аватар для Lexeq
1151 / 743 / 483
Регистрация: 21.01.2014
Сообщений: 1,903
15.08.2018, 23:53
Nalik, у форм конструкторы с разным числом параметров? Откуда берутся эти параметры?
0
 Аватар для Nalik
176 / 124 / 49
Регистрация: 30.11.2012
Сообщений: 1,330
16.08.2018, 08:42
OwenGlendower, спасибочки)
Lexeq, да с разным числом и разными типами. Наверное буду писать свой метод для реализации передачи нетипизированных параметров и подгонять уже под свои формы. Откуда будут браться параметры я так же пока не решил, что-то будет формироваться в коде наверное, что-то приходить извне.

У меня вообще есть компонент webrowser, который выполняет роль небольшой новостной ленты в программе, я делаю возможность при нажатие на ссылку в этом компоненте открывать окна программы. Я парсю ссылку и если она имеет вид https://formshow-separator-form1, то я открываю form1 (form2, form3 и т.д.). Но потом вспомнил, что у меня много форм требуют передачи разных параметоов. Хотел написать универсальный метод с меньшим кодом и более правильный, чем через условия)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.08.2018, 08:42

Открыть в dbGrid таблицу с именем переменной
procedure TForm2.Button1Click(Sender: TObject); var GrBox, PrBox, s, GrPr,DSTable : String; list:tstringlist; begin GrBox :=...

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

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

Открыть новую форму на месте старой
У меня есть виртуальная клавиатура, я перехожу на новую форму, го она открывается в другом месте. Как Ее заставить открываться на месте...

Открыть новую форму и закрыть основную
Me.close(): frm2.show вторая форма открывается обрабатывается sub frm2_load после чего приложение закрывется о.О что это? собсно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
37
Ответ Создать тему
Новые блоги и статьи
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru