Почему я не могу скопировать значения из редактируемого текстового поля? - PullRequest
3 голосов
/ 13 декабря 2010

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

Ответы [ 3 ]

3 голосов
/ 13 декабря 2010

Вы должны реализовать контекстное меню самостоятельно, если оно вам нужно, используя uicontextmenu uicontrol, и добавлять элементы в него, используя uimenu.Смотрите здесь: http://www.mathworks.com/help/techdoc/ref/uicontextmenu.html

2 голосов
/ 13 декабря 2010

Это правда, что редактируемые текстовые поля не вызывают контекстное меню по умолчанию при щелчке правой кнопкой мыши, но есть несколько способов обойти это, если вы хотите скопировать текст в буфер обмена:

  1. Как отметил Михаил в своем комментарии, вы все равно можете выделить текст и нажать Ctrl + C , чтобы скопировать его в буфер обмена.

  2. Как упоминает Итамар в своем ответе , вы можете создать собственное контекстное меню для редактируемого текстового поля, используя функции 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
    

    Теперь вы можете щелкнуть правой кнопкой мыши элемент управления, чтобы вызвать меню с одним параметром: "Копировать".Обратите внимание, что при выборе этого пункта меню он будет копировать редактируемую текстовую строку в буфер обмена без необходимости выделять текст вначале.

  3. Вы можете установить свойство '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);
    

    Это самый быстрый и простой вариант из трех, поскольку для копирования редактируемой текстовой строки в буфер обмена требуется всего один щелчок мыши.

0 голосов
/ 14 декабря 2010

Вы просто хотите установить редактируемое текстовое поле «Включить»?

set (handles.editbox1, «Включить», «on»);

(при условии, что у вас есть «дескриптор» этого объекта GUI.)

Это должно сделать поле редактирования доступным для редактирования.

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