double action of GUIDE adapted drop down menu callback

9 ビュー (過去 30 日間)
G A
G A 2023 年 6 月 13 日
編集済み: G A 2023 年 6 月 14 日
In my code, I still have some GUIDE-style callbacks of dropdown menus as follows (this is just example code):
% Value changed function: mydropdown_menu
function mydropdown_menu_Callback(app, event)
% Create GUIDE-style callback args - Added by Migration Tool
[hObject, ~, handles] = convertToGUIDECallbackArguments(app, event);
value = get(hObject,'Value');
if value==7
warndlg('warning message');
end
guidata(hObject, handles);
end
The issue is: when I make choice of value 7, then 'warning message' is displaed as intended, however, when I make next choice of any other value, the 'warning message' is displayed again. I do not have such a problem in Appdesigner-style value changed callbacks. How can I solve this problem?
  3 件のコメント
G A
G A 2023 年 6 月 13 日
編集済み: G A 2023 年 6 月 13 日
Yes, Rik, you are right. Function is being called twice.
When I have changed callback for this (without using GUIDE-style):
function mydropdown_menu_Callback(app, event)
app.mydropdown_menu.ItemsData = 1:length(app.mydropdown_menu.Items);
SelectedItem = app.mydropdown_menu.Value;
if SelectedItem==7
uiwait(warndlg('message'));
end
end
After choosing value 7, the massage is subsequently displayed twice. Waiting for 'OK' but without waiting for change of menu item. Before, in GUIDE-style, it was waiting for a click on menu item. (With or without 'uiwait')
I have not tried puting breakpoints because I do not know where to put them at the moment.
What does mean "inserting keyboard"?
G A
G A 2023 年 6 月 13 日
function mydropdown_menu_Callback(app, event)
SelectedItem = app.mydropdown_menu.Value
end
this code also displays on Matlab command window the chosen value twice. To avoid accidental double-click of mouse, I made a choice using up-down arrows and 'Enter' key.

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

採用された回答

G A
G A 2023 年 6 月 14 日
編集済み: G A 2023 年 6 月 14 日
A have found the answer to my question.
In GUIDE created and subsequently migrated to Appdesigner dropdown menu, the ValueChangedFcn callback reacts to change of value as well as to click (Changing the name from mydropdown_menu_callback to mydropdown_menuValueChanged did not help). The following code prevented calling twice my callback:
% Value changed function: MatrixM_menu
function mydropdown_menu_callback(app, event)
if strcmp(event.EventName,'Clicked')
return
elseif strcmp(event.EventName,'ValueChanged')
val = app.mydropdown_menu.Value; % The word in the drop down that is showing.
choices = app.mydropdown_menu.Items; % List of all the possible choices.
[~, selectedIndex] = ismember(val, choices); % The index of the selected item.
if selectedIndex==7
uiwait(warndlg('message'));
end
end
end
  2 件のコメント
Image Analyst
Image Analyst 2023 年 6 月 14 日
Yeah, klunky/kludgy. It looks like this is a side effect of having it do a conversion of the GUIDE code. That's why I said to just create a new drop down native to App Designer and you won't have that problem. You'd just have two separate callbacks, or maybe you need just one of them like the ValueChanged event. Anyway, since you used my code, can you at least click the Vote icon for my answer. Thanks in advance. 🙂
G A
G A 2023 年 6 月 14 日
編集済み: G A 2023 年 6 月 14 日
Sure, I will vote. You definitely deserve it:) I even accepted at first your ansver because it was some solution, however, I wanted to understand, why I have shuch a behaviour. BDW, this woud work now with the original after-migration code as well. Have not tested yet.

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

その他の回答 (1 件)

Image Analyst
Image Analyst 2023 年 6 月 13 日
What if you add a "value changed callback" by right clicking on the dropdown list? Then have this
function mydropdown_menu_Callback(app, event)
displayedString = app.mydropdown_menu.Value
selectedIndex = app.mydropdown_menu.Item
if selectedIndex == 7
uiwait(warndlg('warning message'));
end
end
  5 件のコメント
G A
G A 2023 年 6 月 14 日
編集済み: G A 2023 年 6 月 14 日
I think, I found some answer to my question. That may be so called 'mouse double click glitch' (my laptop has Win 10, AMD Rysen 5).
The difference between GUIDE-style and Appdesigner-style dropdown menus is that former acts at any click on option choice whereas the latter calls callback only after choice was changed. Therefore, if I have that glitch on my laptop, then it affects GUIDE-style menu. Though, it happens also when I use up-down arrows and Enter key.
Anyway, @Image Analyst, @Rik - thanks to you both!
G A
G A 2023 年 6 月 14 日

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

カテゴリ

Help Center および File ExchangeMigrate GUIDE Apps についてさらに検索

製品


リリース

R2023a

Community Treasure Hunt

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

Start Hunting!

Translated by