Вопрос Как сделать недействительным / обновить конструктор VS IDE для C #?

StackOverflow https://stackoverflow.com/questions/316193

Вопрос

У меня есть CustomForm , унаследованный от формы , в котором реализовано логическое свойство с именем Prop . Формы, которые я буду использовать, будут наследоваться от CustomForm . Это свойство будет рисовать и вносить изменения (если оно включено) в форму. Однако это не работает должным образом, разработанная VS IDE не обновляется для отображения изменений. Но если я нажму Ctrl + Shift + B (Меню: Build & # 187; Построить решение), VS IDE обновится, дизайнер форм даже исчезнет на долю секунды и перерисовает себя с примененными новыми изменениями.

Итак, есть ли способ, с помощью кода, заставить дизайнера VS IDE обновляться, как это происходит при создании решения? Если это так, я могу добавить этот код в набор средств доступа Prop , и моя проблема исчезнет.

Обратите внимание, что я пытался вызвать Invalidate (), Refresh () и Update. Но никто из них, похоже, не решил проблему ...

<Ч>

Вот немного понимания моей настоящей проблемы. Мой код выглядит примерно так:

internal class MyForm : Form {
    private FormBorderStyle formBorderStyle;
    private bool enableSkin;

    [DefaultValue(false)]
    public bool EnableSkin {
        get {
                return enableSkin;
        } set {
                enableSkin = value;

                if(enableSkin) {
                        BackColor = Color.Lime;
                        MaximizedBounds = Screen.GetWorkingArea(this);
                        TransparencyKey = Color.Lime;

                        base.FormBorderStyle = FormBorderStyle.None;
                } else {
                        BackColor = SystemColors.Control;
                        MaximizedBounds = Rectangle.Empty;
                        TransparencyKey = Color.Empty;

                        base.FormBorderStyle = FormBorderStyle;
                }
        }
    }

    [DefaultValue(FormBorderStyle.Sizable)]
    public new FormBorderStyle FormBorderStyle {
        get {
                return formBorderStyle;
        } set {
                formBorderStyle = value;

                if(EnableSkin) {
                        base.FormBorderStyle = FormBorderStyle.None;
                } else {
                        base.FormBorderStyle = formBorderStyle;
                }

        }
    }

    internal MyForm() {
        EnableSkin = false;
        FormBorderStyle = FormBorderStyle.Sizable;
    }
}

И проблема у меня такая: http://blogs.msdn.com/calvin_hsia/archive/2007/05/01/windows-vista-aero-borderstyle-paint-problem-as -нон-administrator.aspx

В моем случае это происходит, когда вы устанавливаете EnableSkin в True, меняете его обратно на False, а затем изменение FormBorderStyle вызовет проблему, которую вы можете увидеть по ссылке выше. Как указано в статье, проблема не возникает при запуске VS от имени администратора.

Вот почему я ищу способ обновить конструктор VS IDE. Другими словами, теперь, когда я нашел эту статью, мне нужно заново создать окно, как это происходит при перестроении решения.

<Ч>

Как мне объявить свойство в базовой форме?

У меня сейчас есть:

public class MyForm : Form { }

И я могу объявлять свойства только внутри этого класса, а не внутри формы 1. Я также использовал Invalidate (), как я уже говорил в первом посте, но это не решает мою проблему.

Это было полезно?

Решение

Кто-то еще помог мне и решил проблему. Я просто вызываю ReCreateHandle () , когда пользователь устанавливает для EnableSkin значение false. Проблема решена:)

Спасибо всем, хотя:)

Другие советы

Все, что вам нужно сделать, это добавить этот атрибут в вашу собственность:

 [Description("Description of your property."), NotifyParentProperty(true),
 RefreshProperties(RefreshProperties.Repaint)]

Это приведет к перекрашиванию среды IDE при изменении значения.

Насколько я знаю, процедуры рисования не отражаются в IDE, если вы показываете объект, который рисует. Например, если ваша базовая форма выполняет рисование, унаследованный показывает, что ... но если вы откроете базовую форму, она не покажет результат рисования.

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

Кстати ... в теле свойства вы должны вызвать this.Invalidate () , чтобы обновить картину.

Надеюсь, это поможет!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top