我有一个 GUI,其中一些值显示在可编辑的文本框中。出于某种原因,我无法用鼠标复制这些值。我可以选择文本,但右键单击所选文本时不会出现下拉菜单。我一直在到处寻找。我错过了什么?
3 回答
如果需要,您应该自己实现上下文菜单,方法是使用uicontextmenu
uicontrol,并使用uimenu
. 见这里: http: //www.mathworks.com/help/techdoc/ref/uicontextmenu.html
确实,当您右键单击时,默认情况下可编辑文本框不会显示上下文菜单,但如果您想将文本复制到剪贴板,有几种方法可以解决此问题:
正如Mikhail在他的评论中提到的,您仍然可以突出显示文本并按Ctrl+C将其复制到剪贴板。
正如Itamar 在他的回答中提到的,您可以使用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 文件函数保存到路径: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);
这是三个选项中最快和最简单的选项,因为只需单击鼠标即可将可编辑的文本字符串复制到剪贴板。
您只是想让可编辑的文本框“启用”吗?
设置(handles.editbox1,'启用','on');
(假设您拥有该 GUI 对象的“句柄”。)
这应该使编辑框可编辑。