Повторное использование одного и того же метода в нескольких формах окон - PullRequest
0 голосов
/ 20 января 2019

Я хотел бы попросить вас о помощи. Ты поможешь капитану новичку еще раз? :)

У меня есть несколько оконных форм, где я использую datagridview. Я хотел бы отформатировать представления данных одинаково на всех формах (например, AllowUserToAddRows = false;).

Для этого я создал класс MYFormatting и метод, как показано ниже. Я собираюсь использовать композицию, чтобы повторно использовать этот метод в нескольких формах. Я был бы признателен, если бы вы могли сказать мне, если мой подход правильный?

public class MyFormating
    {
        public void FormatDGV(DataGridView dgv)
        {
            dgv.AllowUserToAddRows = false;
            dgv.AllowUserToDeleteRows = false;
            dgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
            dgv.ColumnHeadersVisible = false;
            dgv.RowHeadersVisible = false;
            dgv.MultiSelect = false;
        }
    }

При инициализации новой формы

Form1 frmForm1 = new Form1(new MyFormating());

Затем в каждой форме я собираюсь вызывать метод myFormat и передавать datagridview.

public partial class Form1 : Form
{
    private readonly MyFormating _myFormat;

    public Managers(MyFormating myFormat)
    {
        InitializeComponent();
        _myFormat = myFormat;
        _myFormat.FormatDGV(dgvManagers);

Оставив класс MyFormatting таким, какой он есть, а затем изменив код формы Form1 ниже, я получил бы тот же результат. Это все еще композиция? Должен ли я сделать что-то подобное или соглашение, а не сказать, что я следую описанному выше пути?

При инициализации новой формы

Managers frmManagers = new Managers();

Затем в каждой форме я собираюсь создать новый экземпляр MyFormatting и передать сетку данных его методу

public partial class Form1: Form
    {
        private readonly MyFormating _myFormat;

        public Form1()
        {
            InitializeComponent();
            myFormat = new MyFormating();
            myFormat.FormatDGV(dgvManagers);

Ответы [ 2 ]

0 голосов
/ 22 января 2019

Я предлагаю вам создать новый класс, который наследуется от DataGridView. В этом классе просто установите свойства в конструкторе, как вы хотите. Перестройте проект, и ваш собственный DataGridView должен появиться на панели инструментов. Просто поместите его в форму, как если бы вы использовали стандартный DataGridView.

Пример для DataGridView с предопределенными значениями:

public class MyDataGridView: DataGridView
{
    public MyDataGridView()
    {
        AllowUserToAddRows = false;
        AllowUserToDeleteRows = false;
        AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
        ColumnHeadersVisible = false;
        RowHeadersVisible = false;
        MultiSelect = false;
    }
}

А также снимок экрана пользовательского DataGridView в действии:

DataGridView in Toolbox

0 голосов
/ 21 января 2019

Я понимаю вашу цель. «Расширение» - более практичный метод;

public static class UIExtensions
{
    public static void FormatDGV(this DataGridView dgv)
    {
        dgv.AllowUserToAddRows = false;
        dgv.AllowUserToDeleteRows = false;
        dgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
        dgv.ColumnHeadersVisible = false;
        dgv.RowHeadersVisible = false;
        dgv.MultiSelect = false;
    }
}

и в коде вашей формы (onload или конструктор);

dgvManagers.FormatDGV();

Ищите методы расширения: https://docs.microsoft.com/tr-tr/dotnet/csharp/programming-guide/classes-and-structs/extension-methods

...