Я очень новичок в 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);
}
}
}
Заранее спасибо!
С уважением, Тео