Как применить шаблоны к элементам управления в формах? - PullRequest
1 голос
/ 12 января 2012

Мне интересно, есть ли способ создать шаблоны для элементов управления и применить их только к определенным элементам управления.Приведенная ниже функция устанавливает предварительно заданные настройки для элементов управления (GridView и Listbox) и применяет их к элементам управления, находящимся в основной форме.Проблемы:

  1. Он не работает с элементами управления в других формах.
  2. Я не могу указать, к каким элементам управления он применяется.

Я уверен, что есть лучший способ, но я думаю, что мой поиск в Google хуже, чем мой навык программирования.

    public void SettingControls()
    {
        List<Control> lstControls = GetAllControls(this.Controls);

        //DataGridView
        DataGridViewCellStyle style;
        style = new DataGridViewCellStyle();
        style.Alignment = System.Windows.Forms.DataGridViewContentAlignment.BottomCenter;
        style.BackColor = System.Drawing.Color.GhostWhite;
        style.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
        style.ForeColor = System.Drawing.Color.Black;
        style.SelectionBackColor = System.Drawing.SystemColors.Highlight;
        style.SelectionForeColor = System.Drawing.Color.Navy;
        style.WrapMode = System.Windows.Forms.DataGridViewTriState.True;

        DataGridViewAdvancedBorderStyle borderStyle;
        borderStyle = new DataGridViewAdvancedBorderStyle();
        borderStyle.Bottom = DataGridViewAdvancedCellBorderStyle.OutsetDouble;

        foreach (Control control in lstControls)
        {
            //DataGridView
            if (control is DataGridView)
            {
                DataGridView dgv = ((DataGridView)control);
                dgv.Dock = DockStyle.Fill;
                dgv.AutoGenerateColumns = true;
                dgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells;                    
                dgv.Dock = DockStyle.Fill;
                dgv.DefaultCellStyle.BackColor = Color.Bisque;
                dgv.BorderStyle = BorderStyle.FixedSingle;
                dgv.BackgroundColor = Color.GhostWhite;

                dgv.DefaultCellStyle = style;
            }                

            //ListBox
            if (control is ListBox)
            {
                ListBox lb = ((ListBox)control);
                lb.MeasureItem += new MeasureItemEventHandler(lb_MeasureItem);
                lb.DrawItem += new DrawItemEventHandler(lb_DrawItem);
            }
        }
    }

Ответы [ 2 ]

0 голосов
/ 12 января 2012

Используйте методы расширения. Создайте статический класс в своем проекте и добавьте метод расширения:

public static class Extensions
{
    public static void SettingControls(this Form form)
    {
        List<Control> lstControls = GetAllControls(form.Controls);
        ...
    }
}

Теперь вы можете позвонить с одним из:

this.SettingControls();  // If code is in a Form.

myForm.SettingControls();  // If myForm is a Form.
0 голосов
/ 12 января 2012

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

Например:

public class FormBase : Form
{
    protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);
        SettingControls();
    }

    // Declare as virtual to allow inheritors to override
    public virtual void SettingControls()
    {
        // Code here
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...