Почему я не могу скопировать значения из редактируемого текстового поля?
У меня есть графический интерфейс, где некоторые значения отображаются в редактируемом текстовом поле. Почему-то я не могу скопировать эти значения с помощью мыши. Я могу выделить текст, но при щелчке правой кнопкой мыши по выделенному тексту раскрывающееся меню не появляется. Я искал повсюду. Что мне не хватает?
3 ответа
Это правда, что редактируемые текстовые поля не вызывают контекстное меню по умолчанию при щелчке правой кнопкой мыши, но есть несколько способов обойти это, если вы хотите скопировать текст в буфер обмена:
Как Mikhail упоминает в своем комментарии, вы все равно можете выделить текст и нажать Ctrl + C, чтобы скопировать его в буфер обмена.
Как упоминает Итамар в своем ответе, вы можете создать собственное контекстное меню для редактируемого текстового поля, используя функции UICONTEXTMENU и UIMENU. Вот пример реализации, которая использует функцию CLIPBOARD для добавления редактируемой текстовой строки в буфер обмена:
hFigure = figure; %# Create a figure hEdit = uicontrol(hFigure,'Style','edit',... %# Create an editable text box 'String','Enter your name here',... 'Position',[30 50 130 20]); hCMenu = uicontextmenu; %# Create a context menu uimenu(hCMenu,'Label','Copy',... %# Create a menu item 'Callback',@(hObject,eventData) clipboard('copy',get(hEdit,'String'))); set(hEdit,'UIContextMenu',hCMenu); %# Add context menu to control
Теперь вы можете щелкнуть правой кнопкой мыши на элементе управления, чтобы вызвать меню с одной опцией: "Копировать". Обратите внимание, что при выборе этого пункта меню он будет копировать редактируемую текстовую строку в буфер обмена без необходимости выделять текст в первую очередь.
Вы можете установить
'ButtonDownFcn'
свойство для вашего редактируемого текстового поля, так что щелчок правой кнопкой мыши на элементе управления автоматически скопирует текстовую строку в буфер обмена без необходимости выделять текст или выбирать пункт меню. Сначала вам нужно сохранить эту функцию m-file в путь:function right_click_copy(hObject,eventData) hFigure = get(hObject,'Parent'); %# Get the parent object while ~strcmp(get(hFigure,'Type'),'figure') %# Loop until it is a figure hFigure = get(hFigure,'Parent'); %# Keep getting the parents end if strcmp(get(hFigure,'SelectionType'),'alt') %# Check for a right click clipboard('copy',get(hObject,'String')); %# Copy the object string to %# the clipboard end end
Эта функция использует
'SelectionType'
свойство родительского рисунка, чтобы проверить, какая кнопка мыши была нажата, и функция CLIPBOARD, чтобы скопировать строку объекта в буфер обмена. Теперь вы можете создать свой редактируемый текстовый элемент управления следующим образом:hFigure = figure; %# Create a figure hEdit = uicontrol(hFigure,'Style','edit',... %# Create an editable text box 'String','Enter your name here',... 'Position',[30 50 130 20],... 'ButtonDownFcn',@right_click_copy);
Это самый быстрый и простой вариант из трех, так как для копирования редактируемой текстовой строки в буфер обмена требуется всего один щелчок мыши.
Вы должны реализовать контекстное меню самостоятельно, если оно вам нужно, используя uicontextmenu
uicontrol, и добавление элементов к нему с помощью uimenu
, Смотрите здесь: http://www.mathworks.com/help/techdoc/ref/uicontextmenu.html
Вы просто хотели сделать редактируемое текстовое поле "Включить"?
набор (handles.editbox1,'Enable','на');
(при условии, что у вас есть "дескриптор" этого объекта GUI.)
Это должно сделать поле редактирования доступным для редактирования.