Вопрос Как сделать недействительным / обновить конструктор VS IDE для C #?
-
11-07-2019 - |
Вопрос
У меня есть 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 ()
, чтобы обновить картину.
Надеюсь, это поможет!