enable context menu for specific cell or item in uitable or uilistbox in matlab

조회 수: 29(최근 30일)
This is a cross posting from:
Had no luck there so far.
Basically, I'd like to know how to get a context menu to fire on a specific item in a uitable or uilistbox. There seems to be no way to do this without first click on an entry, and then right clicking at the exact same location and assuming that the user hasn't moved their mouse. Even this double clicking approach (left, then right) would be super awkward.

채택된 답변

Jim Hokanson
Jim Hokanson 2022년 3월 25일
Here's a solution with left click. Couldn't get right to work. More info at linked StackOverflow page above. Code copied here:
classdef wtf < handle
properties
h %struct, this was an appdesigner handle
cm %context menu
end
methods
function obj = wtf()
h = struct;
h.UIFigure = uifigure();
h.UITable = uitable(h.UIFigure);
obj.h = h;
obj.h.UITable.SelectionChangedFcn = @obj.tableCall;
%Some data ...
s = struct;
s.a = (1:4)';
s.b = (5:8)';
obj.h.UITable.Data = struct2table(s);
%Our context menu
cm = uicontextmenu(obj.h.UIFigure);
m = uimenu(cm,'Text','Menu1');
obj.cm = cm;
%WTF ... without this we don't get a valid CurrentPoint
obj.h.UIFigure.WindowButtonMotionFcn = @obj.mouseMove;
end
function tableCall(obj,x,y)
cp = get (obj.h.UIFigure, 'CurrentPoint');
open(obj.cm,cp(1),cp(2));
selected_cell = y.Selection;
%Now we can run something on the context menu
%that targets the selected cell
end
function mouseMove(obj,x,y)
%we could store a point here
end
end
end

추가 답변(0개)

범주

Find more on Startup and Shutdown in Help Center and File Exchange

제품


릴리스

R2020b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by