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

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

28.11.2014, 17:38. Показов 6443. Ответов 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
311 / 309 / 125
Регистрация: 29.01.2013
Сообщений: 638
Записей в блоге: 1
28.11.2014, 18:07
Вам нужно рыть в сторону Reflection. Искать, как вызвать конструктор класса по имени.
1
 Аватар для slenderface
9 / 9 / 5
Регистрация: 24.03.2014
Сообщений: 313
28.11.2014, 18:35  [ТС]
kontuPauk, но трудно сказать куда рыть.

Добавлено через 33 секунды
я пока что не так давно в программировании С#!
0
1168 / 886 / 517
Регистрация: 09.04.2014
Сообщений: 2,102
28.11.2014, 18:58
Цитата Сообщение от slenderface Посмотреть сообщение
я пока что не так давно в программировании С#!
тогда опишите проблему, может ее можно решить другим путем
1
 Аватар для Metall_Version
2152 / 1289 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
28.11.2014, 19:16
slenderface, вот на примере консоли, думаю под форму имена классов сами измените
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    class Program
    {
        static void Main(string[] args)
        {
            Type type = Type.GetType("ConsoleApplication6.Program", false, true);
 
            System.Reflection.ConstructorInfo ci = type.GetConstructor(new Type[] { });
            object obj = ci.Invoke(new object[] { });
 
            ((Program)obj).Method();
 
            Console.ReadLine();
        }
 
        public void Method()
        {
            Console.WriteLine("Hello");
        }
    }
Добавлено через 1 минуту
ConsoleApplication6 это неймспейс класса Program
1
 Аватар для CyberAlfred
63 / 62 / 14
Регистрация: 16.12.2012
Сообщений: 606
28.11.2014, 23:35
C#
1
2
3
4
Form form2 = new Form()
string str = "hello";
form2.name = str;
form2.show();
Вам это надо?
1
 Аватар для slenderface
9 / 9 / 5
Регистрация: 24.03.2014
Сообщений: 313
01.12.2014, 20:40  [ТС]
Всем спасибо! Попробую

Добавлено через 8 минут
CyberAlfred, проверил, но это не работает(

Добавлено через 4 минуты
Metall_Version, у меня вариант такой:
в listbox несколько итемов. При активации итема, хочу чтобы мне открывалась форма, с именем выбранного итема. Как осуществить предыдущее я знаю, а вот как открыть эту форму с итемом?
Цитата Сообщение от Metall_Version Посмотреть сообщение
вот на примере консоли, думаю под форму имена классов сами измените
Я начинающий. Честно говоря, как преобразовать не ясно

Добавлено через 1 минуту
nedel,
Цитата Сообщение от slenderface Посмотреть сообщение
у меня вариант такой:
в listbox несколько итемов. При активации итема, хочу чтобы мне открывалась форма, с именем выбранного итема. Как осуществить предыдущее я знаю, а вот как открыть эту форму с итемом?
0
 Аватар для CyberAlfred
63 / 62 / 14
Регистрация: 16.12.2012
Сообщений: 606
01.12.2014, 20:44
slenderface, сорики. писал с телефона. с регистром ошибки были и свойство перепутал у формы. ври рабочий пример
C#
1
2
3
4
            Form form2 = new Form();
            string str = "hello";
            form2.Text = str;
            form2.Show();
1
 Аватар для Metall_Version
2152 / 1289 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
01.12.2014, 20:46
Цитата Сообщение от slenderface Посмотреть сообщение
Я начинающий. Честно говоря, как преобразовать не ясно
обязательно по имени класса создавать его экземпляр , возможно достаточно в зависимости от имени итема запустить ту или иную форму?

напишите что вам нужно, ибо делать такое через динамическое создание объекта это как - использовать микроскоп чтобы забить гвоздь
1
 Аватар для slenderface
9 / 9 / 5
Регистрация: 24.03.2014
Сообщений: 313
01.12.2014, 20:58  [ТС]
CyberAlfred, но это тоже самое. Он содаёт новую- пустую форму, либо показывает старую с новым текстом, и видоизменённым именем.
Metall_Version,
Цитата Сообщение от Metall_Version Посмотреть сообщение
напишите что вам нужно, ибо делать такое через динамическое создание объекта это как - использовать микроскоп чтобы забить гвоздь
хорошо, вот:
есть форма 1. Открываем новую форму при клике(или др. методе - значения не имеет) так:
C#
1
Form form2 = new Form(); form2.Show();
А мне надо чтобы первые Form - имя открываемой формы задавалось не сразу, а по значению переменной string.
т.е :
C#
1
2
3
String abc = "Form2";
[строка abc] a = new [строка abc]; // открываю форму с именем из переменной
a.Show();
0
 Аватар для CyberAlfred
63 / 62 / 14
Регистрация: 16.12.2012
Сообщений: 606
01.12.2014, 21:07
slenderface, я вас не понимаю. вам надо задать имя второй формы из переменной, когда вы ее вызываете?
1
 Аватар для Metall_Version
2152 / 1289 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
01.12.2014, 21:19
Цитата Сообщение от slenderface Посмотреть сообщение
А мне надо чтобы первые Form - имя открываемой формы задавалось не сразу, а по значению переменной string.
т.е :
это вам преподователь задание дал создавать объекты динамически, или вы себе приключений нашли ?
это все делается проще, если нужно просто в зависимости от строки открыть ту или иную форму
2
 Аватар для slenderface
9 / 9 / 5
Регистрация: 24.03.2014
Сообщений: 313
01.12.2014, 21:47  [ТС]
Metall_Version, нет, я самоучка.
если есть другие варианты - предлагайте!
0
 Аватар для Metall_Version
2152 / 1289 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
01.12.2014, 23:22
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
    public partial class Form1 : Form
    {
        private Dictionary<string, Form> dict; 
        public Form1()
        {
            InitializeComponent();
            dict = new Dictionary<string, Form>()
            {
                {"Form2", new Form2()},
                {"Form3", new Form3()}
            };
            listBox1.Items.AddRange(dict.Keys.ToArray());
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            if(listBox1.SelectedIndex == -1) return;    // если в списке не выбрана строка выходим из метода
 
            string selectedItem = listBox1.SelectedItem.ToString();
            if(dict.ContainsKey(selectedItem)) 
                dict[selectedItem].Show();
        }
    }
на форме1 есть листбокс и кнопка.
1
1168 / 886 / 517
Регистрация: 09.04.2014
Сообщений: 2,102
01.12.2014, 23:31
Цитата Сообщение от slenderface Посмотреть сообщение
у меня вариант такой:
в listbox несколько итемов. При активации итема, хочу чтобы мне открывалась форма, с именем выбранного итема. Как осуществить предыдущее я знаю, а вот как открыть эту форму с итемом?
а теперь подробнее, что у вас за итемы? названия типов классов (судя по предложенному вами варианту)? если да, то резонный вопрос: зачем? есле нет то что тогда
1
311 / 309 / 125
Регистрация: 29.01.2013
Сообщений: 638
Записей в блоге: 1
01.12.2014, 23:47
Короче, я правильно понимаю, что Вам нужно?
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();
2
 Аватар для slenderface
9 / 9 / 5
Регистрация: 24.03.2014
Сообщений: 313
02.12.2014, 15:12  [ТС]
kontuPauk, спасибо, я проверю - отпишусь!
Metall_Version, благодарю, тоже попробую!
nedel, а уже рассказал вроде. есть listbox. по активации выбранного итема, его имя(имя итема), присвою переменной. Сразу же открываю новую форму, название которой = моей переменной.

Цитата Сообщение от nedel Посмотреть сообщение
названия типов классов (судя по предложенному вами варианту)? если да, то резонный вопрос: зачем? если нет то что тогда
ну можно и так сказать. Но надо любым путем открыть выбранную форму, а не ту, которая открывается изначально по заданному варианту:
C#
1
Form form2 = new Form();
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
02.12.2014, 15:34
Цитата Сообщение от slenderface Посмотреть сообщение
есть listbox. по активации выбранного итема, его имя(имя итема), присвою переменной. Сразу же открываю новую форму, название которой = моей переменной.
Так я вот не пойму, у вас вторичных форм - несколько? И надо открывать ту, имя которой выбрано?
Или вторичная форма одна, надо просто присвоить ей имя из выбранного списка?
1
 Аватар для slenderface
9 / 9 / 5
Регистрация: 24.03.2014
Сообщений: 313
02.12.2014, 15:38  [ТС]
Цитата Сообщение от insite2012 Посмотреть сообщение
Так я вот не пойму, у вас вторичных форм - несколько? И надо открывать ту, имя которой выбрано?
Да. Например: Form2, Form3 и т.д. ...
Если string abc = "Form2", то открываем "Form2", если string abc = "Form3", то открываем форму 3, если string abc = "axxx", то откроем форму axxx. Ясненько?
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
02.12.2014, 15:58
Цитата Сообщение от slenderface Посмотреть сообщение
Да. Например: Form2, Form3 и т.д. ...
Всего-навсего??? И из-за этого уже 19 постов в теме???)))))

Добавлено через 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();
        }
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.12.2014, 15:58
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru