C # Изменение свойства Winform Control WindowTarget (System.Design) - PullRequest
0 голосов
/ 03 июля 2019

Я создаю конструктор поверхностей (аналогичный Visual Studio Designer) и среду выполнения.В конструкторе все на 100%.Я сериализирую все элементы управления дизайнера и десериализованные элементы управления в среду выполнения, но элементы управления все еще содержат TargetWindow конструктора.Основная проблема заключается в том, что среда выполнения все еще поддерживает эффекты конструктора из-за TargetWindow.

Я попытался отразить изменение самого свойства, но это создает странные эффекты.Я пытался создать элементы управления и скопировать все свойства, но это не копирует все свойства, такие как дочерние элементы управления и т. Д.

//Example of creating the properties to a new control
  var ts = Assembly.Load(cont.GetType().Assembly.FullName);
                    var o = ts.GetType(cont.GetType().FullName);
                    Control controlform = (Control)Activator.CreateInstance(o);

                    PropertyInfo[] controlProperties = cont.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);

                    foreach (PropertyInfo propInfo in controlProperties)
                    {
                        if (propInfo.CanWrite)
                        {

                            if (propInfo.Name != "Site" && propInfo.Name != "WindowTarget")
                                propInfo.SetValue(controlform, propInfo.GetValue(cont, null), null);
                            else
                            {

                            }
                        }
                    }

//Example of creating trying to change the property directly with reflection.
                    var ts = Assembly.Load(cont.GetType().Assembly.FullName);
                    var o = ts.GetType(cont.GetType().FullName);
                    Control controlform2 = (Control)Activator.CreateInstance(o);

                    Control controlform = cont;
                    controlform.Site = null;
                    if (controlform.Parent == null)
                        controlform.Parent = this;

                    PropertyInfo[] controlProperties = controlform.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);
                    foreach (PropertyInfo propInfo in controlProperties)
                    {
                        if (propInfo.CanWrite)
                        {

                            if (propInfo.Name == "WindowTarget")
                                propInfo.SetValue(controlform, propInfo.GetValue(temp), null);
                            else
                            {

                            }
                        }
                    }

Я думаю, что должен быть более простой способ изменить TargetWindow.свойство или изменить элемент управления от времени разработки до времени выполнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...