C # winform поместите форму на панель и получите доступ к ней из другой формы - PullRequest
0 голосов
/ 12 марта 2019

Я очень новичок в C #, поэтому я надеюсь, что вы можете мне помочь.

У меня есть панель в (основной) форме. В этой панели я хочу показать разные части контента. Исследователь научил меня, что я могу использовать форму или пользовательский элемент управления на этой панели. содержимое будет представлением таблицы данных, соединенным с базой данных SQL, некоторыми кнопками и некоторой информацией (метками).

Первый вопрос: Что лучше всего реализовать на этой панели? Новая форма или пользовательский элемент управления.

(отныне эти разные фрагменты контента будут называться экранами)

Для реализации формы (или пользовательского элемента управления) на панели я могу использовать этот фрагмент кода (другие ссылки предоставили этот код):

Form objForm = new Form();
objForm.TopLevel = false;
panel1.Controls.Clear();
panel1.Controls.Add(objForm);
objForm.Show();

Второй вопрос: Разве плохо очищать панель каждый раз, когда отображается новая форма?

Окончательная программа будет состоять из 10-15 экранов, некоторые из этих экранов должны быть доступны с других экранов: Пример:
Mainform имеет 2 кнопки - покупка и продажа.
Купить имеет 2 кнопки - купить товар и купить услугу.
у продавать есть 2 кнопки - продать товар и продать сервис.

Панель в mainform должна быть заполнена buyForm и sellForm. Затем он должен быть в состоянии заполнить buyProductForm и ButServiceForm при нажатии этой кнопки.

Третий вопрос: У меня есть решение проблемы, но я не знаю, является ли это правильным решением (или даже имеет ли смысл делать это таким образом).

Решение: Я создал класс под названием MainPanel. В этом классе есть глобальная панель (которая доступна во всех формах). В функции загрузки mainForm эта глобальная панель имеет значение panel1 (из mainForm). Таким образом, глобальная панель может быть вызвана из других форм для обновления панели из mainForm. Смотрите код:

Код класса: имеет глобальную панель и функцию для отображения заполненной формы на панели.

namespace myProgram
{
    public class MainPanel
    {
        public static Panel Globalpanel = new Panel();

        public void UpdatePanel(Form form)
        {
            form.TopLevel = false;
            MainPanel.Globalpanel.Controls.Clear();
            MainPanel.Globalpanel.Controls.Add(form);
            form.Show();
        }
    }
}

Код MainForm: MainPanel. Глобальная панель установлена ​​равной panel1. Таким образом, содержимое панели может быть изменено глобально (всеми формами).

namespace myProgram
{
    public partial class MainForm : Form
    {
        private MainPanel mainPanel = new MainPanel();
        public MainForm()
        {            
            InitializeComponent();
            MainPanel.Globalpanel = panel1;
        }
    }
}

вызывающая функция: (пример formBuy)

namespace screentest3
{
    public partial class FormBuy : Form
    {
        private MainPanel mainpanel = new MainPanel();
        public FormBuy()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            FormBuyProducts form = new FormBuyProducts();
            mainpanel.UpdatePanel(form);
        }
    }
}

Заранее спасибо! С уважением, Тео

...