Поместите один и тот же элемент управления несколько раз в форму (программно) - PullRequest
0 голосов
/ 30 августа 2018

Я создал DataGridView и установил его свойства, как я хотел.
Проблема в том, что у меня может быть четыре одинаковых DataGridView в приложении, в зависимости от некоторых условий в моем приложении. Я хочу знать, смогу ли я создать один экземпляр DataGridView программно и скопировать все свойства из исходного DataGridView, чтобы у меня было 2,3,4 одинаковых DataGridView?

Я знаю, что это возможно с помощью дизайнера, но как скопировать его программно?


Я слышал о методах расширения, но есть ли более легкий подход?


EDIT: я добавил новый метод:

private void copyControl(Control sourceControl, Control targetControl)
    {
        // make sure these are the same
        if (sourceControl.GetType() != targetControl.GetType())
        {
            throw new Exception("Incorrect control types");
        }

        foreach (PropertyInfo sourceProperty in sourceControl.GetType().GetProperties())
        {
            object newValue = sourceProperty.GetValue(sourceControl, null);

            MethodInfo mi = sourceProperty.GetSetMethod(true);
            if (mi != null)
            {
                sourceProperty.SetValue(targetControl, newValue, null);
            }
        }
    }



   DataGridView dgw = new DataGridView();
   copyControl(PartsDgv, dgw);


И я получаю это исключение
enter image description here

...