Удалить строку в таблице пользовательского интерфейса при выборе с помощью правой кнопки мыши - Matlab 2020a - PullRequest
4 голосов
/ 19 июня 2020

В этой функции (разработчик приложения) я удаляю строку в таблице после выбора с помощью левой кнопки мыши, как я могу использовать правую кнопку или другую комбинацию клавиш + мышь для выбора вместо левой?

Код:

% Cell selection callback: infoTable
        function infoTableCellSelection(app, event)
            indices = event.Indices;
            data = app.infoTable.Data;
            row = indices(:,1);
            figSelect = uifigure;
            figSelect.SelectionType ='alt'; 
            selection = uiconfirm(figSelect,'Delete row?','Confirm Close',...
                        'Icon','question');
            disp(selection); 
            disp(figSelect.SelectionType);
            switch selection
            case 'OK'
                app.infoTable.Data(row,:) = [];
                close(figSelect);
            case 'Cancel'
                close(figSelect);
                return
            end 

Позже в коде:

function createComponents(app)
...
    app.infoTable.CellSelectionCallback = createCallbackFcn(app, @infoTableCellSelection, true);

1 Ответ

0 голосов
/ 22 июня 2020

Любые клавиши-модификаторы (например, shift, control), которые нажимаются при выборе uitable, могут быть обнаружены через родительский uifigure (я назову его app.figMain). Модификаторы возвращаются в виде массива ячеек с помощью недокументированной команды modifiers = get(app.figMain,'CurrentModifier'). Вы можете использовать оператор if, который выполняется только в том случае, если нажатие клавиш не указано в modifiers. Другими словами, обратный вызов выбора таблицы выполняется только для щелчка левой кнопкой мыши, но не для щелчка с нажатой клавишей Shift, Ctrl + щелчок и т.д. c.

Реализация этого в данном коде:

    function infoTableCellSelection(app, event)
        modifiers = get(app.figMain,'CurrentModifier');
        if isempty(modifiers) % Check that shift-key, ctrl-key, etc. is not pressed
            indices = event.Indices;
            data = app.infoTable.Data;
            row = indices(:,1);
            figSelect = uifigure;
            selection = uiconfirm(figSelect,'Delete row?','Confirm Close',...
                        'Icon','question');
            disp(selection); 
            disp(figSelect.SelectionType);
            switch selection
            case 'OK'
                app.infoTable.Data(row,:) = [];
                close(figSelect);
            case 'Cancel'
                close(figSelect);
                return
            end
        end
    end 

MATLAB Undocumented описывает команду CurrentModifier: CurrentModifier

...