フィルターのクリア

Avoid deleting of datatip when clicking on marker

2 ビュー (過去 30 日間)
Sebastian Hölz
Sebastian Hölz 2024 年 6 月 6 日
回答済み: Sebastian Hölz 2024 年 6 月 12 日
When creating a datatip DT, it is deleted when I click on the marker without moving the DT.
Example:
figure
h = plot(rand(100,1));
DT = datatip(h,'DataIndex',22);
Now, clicking on the marker of the DT without moving this, will delete the DT when releasing the mouse-button. Important: I still want to be able to move the DT, it should just not be deleted when clicking on it without moving it.
Is there a simple way of preventing this from happening? I implemented a solution using listeners and undocumented stuff, but I was wondering if there is a simple solution that I'm just missing.

採用された回答

Sebastian Hölz
Sebastian Hölz 2024 年 6 月 12 日
OK, here my solution which allows to move the DT, allows deleting the DT via contextmenu and restores it when being deleted by clicking on the DT. I don't quite like the fact that I cannot avoid the DT from being destroyed and have to restore it. Also, checking the stack to allow for deleting when being called by the contexmenu is a hack which might not work sometimes in the future. So, if anyone finds a more documented solution, I would be glad to hear it.
function DataTip_test
figure
h = plot(rand(100,1));
DT = datatip(h,'DataIndex',22);
addlistener(DT, 'ObjectBeingDestroyed',@RestoreDT);
% ==========================
function RestoreDT(varargin)
% Allow deleting when parent line is being deleted
if strcmp(h.BeingDeleted,'on'); return; end
% Allow deleting, if triggered by context menu
db = dbstack;
if strcmp(db(end).file,'createContextMenu.p'); return; end
% Otherwise, restore datatip
DT = datatip(h, 'DataIndex',DT.DataIndex);
addlistener(DT, 'ObjectBeingDestroyed',@RestoreDT);
end
end

その他の回答 (1 件)

Matlab Pro
Matlab Pro 2024 年 6 月 6 日
Just set the 'PickableParts' = 'none'
DT = datatip(h,'DataIndex',22,'PickableParts','none');
  1 件のコメント
Sebastian Hölz
Sebastian Hölz 2024 年 6 月 7 日
編集済み: Sebastian Hölz 2024 年 6 月 10 日
My original question was not quite complete. I still want to be able to drag the DT to a different position. It should just not be deleted when I click on it without dragging it. Thus, the above answer does not solve my problem.
Sorry for not being precise enough, I have updated the original question to mention this.

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeInteractive Control and Callbacks についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by