Как включить / отключить вырезание / копирование / вставку пунктов меню и панели инструментов в общем виде?

У меня есть приложение для форм Windows с такими элементами управления, как textbox, combobox, datagridview и т. Д. Эти элементы управления позволяют пользователю использовать буфер обмена, т.е. вырезать / копировать и вставлять текст. Также возможно удалить текст (который не связан с буфером обмена).

В моем приложении есть строка меню с элементом «Редактировать», содержащим элементы «Вырезать / Копировать / Вставить / Удалить», а также панель инструментов с этими элементами. Как правильно включить / отключить эти элементы в зависимости от состояния элемента управления, имеющего фокус?

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

18.09.2008 12:55:43
2 ОТВЕТА

Создайте массив для каждой группы включения / выключения. Добавьте элементы управления в массив (конечно, это должен быть правильный тип, такой как Object или Any, и т. Д., Зависит от языка программирования, который вы используете). Затем, чтобы включить, отключите просто цикл по массиву и вызовите метод или функцию включения / отключения для каждого элемента управления. Опять же, в зависимости от языка, вам может потребоваться отбросить.

0
18.09.2008 13:06:02

Не существует универсального интерфейса или набора методов для получения вырезанной / скопированной / вставленной информации из оконного элемента управления.

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

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

3
18.09.2008 13:08:41