Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
130 / 68 / 31
Регистрация: 24.07.2018
Сообщений: 787

Вызов необходимой формы из нескольких

19.06.2019, 10:20. Показов 954. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!
Вызываю форму номенклатур (одна форма для нескольких таблиц) таким образом:
C#
1
2
3
4
5
6
7
8
9
private void miCustomers_Click(object sender, EventArgs e)
        {
            db = new MyContext();
            db.Customers.Load();
            var customers = db.Customers.Local.ToBindingList();
            var fNomenclature = new FormNomenclature(customers);
            fNomenclature.Text = "Заказчики";
            fNomenclature.ShowDialog();
        }
Появляется вот такая форма номенклатур:

Код формы номенклатур:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
public partial class FormNomenclature : Form
    {        
        public FormNomenclature(object dbSet)
        {
            InitializeComponent();            
            dgvNomenclature.DataSource = dbSet;
        }
 
        private void btnAdd_Click(object sender, EventArgs e)
        {            
            
        }
    }
Далее по кнопке Добавить/Изменить должна появиться следующая форма

Форма добавления и изменения будет у каждой таблицы своя.
Как не используя IF ELSE и CASE, открывать мне нужную форму добавления и изменения номенклатуры?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.06.2019, 10:20
Ответы с готовыми решениями:

Вывод необходимой формы на печать
Здравствуйте, дорогие форумчане! Очень нужна ваша помощь!!! В Access 2013 создана база по учету клиентов, в которой организован поиск по...

Передача имени формы в процедуру и в процедуре вызов метода объекта формы
Есть несколько форм: FrmMain, Frm2, Frm3. На каждой форме есть RichEdit под именем RchEdtLog. Нужна процедура Log которая должна...

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

12
2810 / 1679 / 885
Регистрация: 14.04.2015
Сообщений: 5,723
19.06.2019, 11:22
MaksimkaI, получаешь имя своей таблицы в переменную, например, string TableName, а потом передаешь переменную в кнопку "добавить/изменить":
C#
1
2
            Form form = new Form { Text = TableName };
            form.ShowDialog();
Именя форм и таблиц должны совпадать
0
130 / 68 / 31
Регистрация: 24.07.2018
Сообщений: 787
19.06.2019, 11:43  [ТС]
AndreyVorobey,
Только такое решение пока придумал

Открываю форму номенклатур:
C#
1
2
3
4
5
6
7
8
9
10
11
private void miCustomers_Click(object sender, EventArgs e)
        {
            var TableName = "Заказчики";
            ShowForm(TableName);
        }
 
        private void ShowForm(string TableName)
        {
            var fNomenclature = new FormNomenclature(TableName);            
            fNomenclature.ShowDialog();
        }
В коде формы номенклатур прописал:
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
32
33
34
35
36
37
    public partial class FormNomenclature : Form
    {
        MyContext db;
        object dgvSource;
        string TableName;          
        public FormNomenclature(string TableName)
        {
            InitializeComponent();
            this.TableName = TableName;
            db = new MyContext();
 
            switch (TableName)
            {
                case "Заказчики":
                    Text = "Заказчики";
                    db.Customers.Load();                    
                    dgvSource = db.Customers.Local.ToBindingList();
                    break;               
            }            
            
            dgvNomenclature.DataSource = dgvSource;
            
        }
 
        private void btnAdd_Click(object sender, EventArgs e)
        {
            switch (TableName)
            {
                case "Заказчики":
                    var fCustomer = new formCustomer();
                    fCustomer.Editing = false;
                    fCustomer.ShowDialog();
                    break;
            }
        }
       
    }
Код добавления/редактирования заказчика:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public partial class formCustomer : Form
    {
        public bool Editing { get; set; }
        public formCustomer()
        {            
            InitializeComponent();
            if (Editing)
            {
                Text = "Форма изменения данных заказчика";
            }
            else
            {
                Text = "Форма добавления нового заказчика";
            }  
        }      
    }
Добавлено через 1 минуту
0
2810 / 1679 / 885
Регистрация: 14.04.2015
Сообщений: 5,723
19.06.2019, 11:46
MaksimkaI, так вопрос в чем ?
0
130 / 68 / 31
Регистрация: 24.07.2018
Сообщений: 787
19.06.2019, 11:49  [ТС]
AndreyVorobey, Вопрос в том, что у меня будет много таблиц и этих:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 switch (TableName)
            {
                case "Заказчики":
                    Text = "Заказчики";
                    db.Customers.Load();                    
                    dgvSource = db.Customers.Local.ToBindingList();
                    break;
                case "Модели дверей":
                    Text = "Модели дверей";
                    db.ModelDoors.Load();                    
                    dgvSource = db.ModelDoors.Local.ToBindingList();
                    break;
                case "Основные замки":
                    Text = "Модели дверей";
                    db.MainLocks.Load();                    
                    dgvSource = db.MainLocks.Local.ToBindingList();
                    break;
 
               
            }
Будет много
C#
1
case
0
2810 / 1679 / 885
Регистрация: 14.04.2015
Сообщений: 5,723
19.06.2019, 12:22
MaksimkaI, давай сначала. на первой форме у тебя несколько datagrid, каждый получает данные из своей таблицы. есть одна кнопка изменить. по ее нажатии должна появиться своя форма для той таблицы, которую ты выбрал?
0
130 / 68 / 31
Регистрация: 24.07.2018
Сообщений: 787
19.06.2019, 12:29  [ТС]
Цитата Сообщение от AndreyVorobey Посмотреть сообщение
на первой форме у тебя несколько datagrid
DGV одна, DataSource разный. А остальное правильно.

Добавлено через 1 минуту
AndreyVorobey, Кстати придется еще id записи выбирать, исходя из того какая таблица у меня сейчас на форме номенклатур.
0
2810 / 1679 / 885
Регистрация: 14.04.2015
Сообщений: 5,723
19.06.2019, 12:36
MaksimkaI, по какому алгоритму заполняется dgv? раз она одна, то предварительно надо что-то сделать, чтобы она заполнилась теми данными, которые находятся в нужной таблице.
0
130 / 68 / 31
Регистрация: 24.07.2018
Сообщений: 787
19.06.2019, 12:44  [ТС]
AndreyVorobey, Нажимаю кнопку на главной форме, например, заказчики, говорю, что
C#
1
var TableName = "Заказчики";
передаю TableName в метод ShowForm и показываю форму.
C#
1
2
3
4
5
private void ShowForm(string TableName)
        {
            var fNomenclature = new FormNomenclature(TableName);            
            fNomenclature.ShowDialog();
        }
Далее идем в код Формы номенклатур:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public FormNomenclature(string TableName)//Чтобы вызвать форму, нужно передать имя таблицы
        {
            InitializeComponent();
            this.TableName = TableName;//Устанавливаю полученное Имя таблицы в текущую форму
            db = new MyContext();
 
            switch (TableName)//Здесь будут все case всех таблиц
            {
                case "Заказчики":
                    Text = "Заказчики";
                    db.Customers.Load();//Загружаю DbSet Заказчиков                   
                    dgvSource = db.Customers.Local.ToBindingList();//Перевожу как биндинг лист
                    break;               
            }            
            
            dgvNomenclature.DataSource = dgvSource;//Устанавливаю DataSource для DGV
            
        }
0
130 / 68 / 31
Регистрация: 24.07.2018
Сообщений: 787
19.06.2019, 12:46  [ТС]
AndreyVorobey, Вот можешь посмотреть:CRM Doors v1.rar
0
130 / 68 / 31
Регистрация: 24.07.2018
Сообщений: 787
19.06.2019, 13:12  [ТС]
Вот если бы здесь
C#
1
2
3
4
5
private void ShowForm(string TableName)
        {
            var fNomenclature = new FormNomenclature(TableName);            
            fNomenclature.ShowDialog();
        }
я передал
C#
1
DbSet<Customer> Customers
вот такую конструкцию как то.То есть в конструктор формы номенклатур уже передать сразу контекст Customers.
Я уже все перерыл, ничего подобного не могу найти вообще.
0
2810 / 1679 / 885
Регистрация: 14.04.2015
Сообщений: 5,723
19.06.2019, 15:33
MaksimkaI, не понимаю, зачем усложняешь, если можно делать проще. вот пример, только вместо таблиц файлы, наполни по-своему их. уверен, что и его можно упростить.
Вложения
Тип файла: 7z WinFormCRM.7z (4.76 Мб, 3 просмотров)
0
130 / 68 / 31
Регистрация: 24.07.2018
Сообщений: 787
19.06.2019, 16:15  [ТС]
AndreyVorobey, в общем я решил
Вызываю так:
C#
1
2
3
4
5
private void miCustomers_Click(object sender, EventArgs e)
        {            
            var fNomenclature = new FormNomenclature(typeof(Customer));            
            fNomenclature.ShowDialog();
        }
C#
1
2
3
4
5
6
7
 public FormNomenclature(Type Model):this()            
        {
            this.Model = Model;         
            mySet = db.Set(Model);
            mySet.Load();
            dgvNomenclature.DataSource = mySet.Local;
        }
Необходимо было чисто тип контекста передавать и потом устанавливать с помощью Set для DbSet Тип
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.06.2019, 16:15
Помогаю со студенческими работами здесь

Вызов процедуры MDIchild формы из другой формы
Добрый день! Может кто подсказать, есть ли решение такой проблемы? Есть MDI приложение. Дочерние формы создаю как экземпляр (чтобы было...

Вызов формы из формы по коду записи
Доброго времени суток уважаемые форумчане! Помогите с проблемой новичку. В прикреплённой базе есть форма &quot;просмотр расходов&quot;,...

Вызов уже созданой формы из формы
Есть главная форма, как вызвать другую форму? Форма есть в Експлорере, но как её вызвать?

Вызов метода формы из другой формы
Иногда у разработчика возникает необходимость вызывать какой-либо метод, определенный в форме из другой формы. Начинающих типа меня такая...

вызов формы из формы как правильно?
Добрый день. Есть MainWindow и EditWindow(parent MainWindow) Как правильней будет сделать вызов дочерней формы?Создавать экземпляр в...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это дополнительная запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru