Каков правильный метод для редактора компонентов для изменения свойств других элементов управления? - PullRequest
1 голос
/ 18 января 2010

У меня есть компонент, для которого я создаю редактор. Одна из функций этого компонента - разрешить привязку к этому компоненту других элементов управления моего собственного типа.

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

Однако, если файл (-ы) формы в настоящий момент сохраняются при вызове редактора, изменение этих свойств позволяет мне видеть изменения этих элементов управления, когда я возвращаюсь в обычный конструктор форм, но файл по-прежнему сохраняется. помечен как «неизмененный», и, таким образом, никакие изменения не сохраняются.

Что мне нужно сделать в редакторе компонентов, чтобы сообщить дизайнеру, что что-то случилось?

Это простой вызов флага или метода, или мне нужно больше учебника по этому вопросу?

Позвольте мне попытаться объяснить это лучше.

Я удаляю компонент на форме, он находится в серой области под ним, и у этого компонента у меня есть свойство с собственным редактором свойств. Это работает.

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

Если моя форма редактора свойств изменяет какие-либо свойства в этом текстовом поле или комбинированном ящике, скажем, он изменяет свойство .Text, а затем возвращается к моей форме, закрывая редактор свойств, я могу проверить текстовое поле и комбинированный список и увидеть Свойство .Text действительно изменилось.

Однако, и это проблема, файл не помечен как измененный. Это означает, что если я нажму F5, отладчик запустится без перестроения, и если я закрою и снова открою форму, свойства вернутся к своему последнему сохраненному значению.

Я посмотрю на метод OnComponentChange из одного из ответов и посмотрю, устраняет ли это эту проблему.

1 Ответ

1 голос
/ 26 января 2010

Насколько я понимаю твой вопрос ...

Вы должны иметь возможность обрабатывать уведомления дизайнера об изменениях значений свойств с помощью транзакций OnComponentChanging и OnComponentChange . Эти методы вызываются автоматически, если вызывается SetValue:

TypeDescriptor.GetProperties(theComponent).Find(
    theName, True).SetValue(theComponent, theNewValue);

Также можно вручную вызвать уведомление OnComponentChange , чтобы сообщить конструктору, что что-то произошло и изменение уже произошло.

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