Как реализовать IWindowsFormsEditorService в C #?ака имитация редактирования на месте в Windows Forms - PullRequest
0 голосов
/ 06 августа 2010

Я хотел бы реализовать пользовательский элемент управления на основе Windows-Forms, аналогичный сетке свойств Visual Studio. Для этого, хотя и намного проще. В идеале я хотел бы повторить поведение интерфейса IWindowsFormsEditorService, который используется для запуска редактирования на месте в сетке свойств путем вызова клиентских реализаций UITypeEditor.

В качестве более простого примера мне нужно реализовать редактирование значения только через симулированный ComboBox (или раскрывающийся список) в ячейке. То, как Visual Studio делает это, включает в себя настоящий элемент управления ComboBox. Скорее Visual Studio отображает небольшую выпадающую кнопку справа от ячейки, которая при нажатии запускает отображение и операции простого элемента управления ListBox, расположенного таким образом, чтобы имитировать выпадающий ComboBox.

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

Я очень хорошо разбираюсь в COM и C ++, но я хотел бы реализовать для этого чистое решение на основе C #.

Что было бы хорошим способом реализовать простое симулированное редактирование CombBox на месте в пользовательском сетчатом элементе управления?

1 Ответ

0 голосов
/ 06 августа 2010

Вы должны создать отдельную форму для режима модального редактирования (содержащую поле со списком), а затем показать ее, вызвав ShowDialog().

Метод ShowDialog() выполнит цикл модальных сообщений.Поскольку это отдельная форма, у вас не будет проблем с размером родительского элемента управления.

...