2016-12-06 6 views
0

私はGUI上にリストボックスを持っています。私がプログラムを開始すると、リストボックスの最初の値が選択されます。しかし、最初にクリックすると値が登録されるだけです。 リストボックスの最初のオプションをクリックしなくても、プログラマーが計算を開始できる方法はありますか?リストボックスで選択した値を最初にクリックすることなく即座に取得します。GUI

私の考えは、Openingfunctionのハンドルを設定することでしたが、うまくいきませんでした。ここで

は私のコードです:

function lastfolge_aufbereiten_OpeningFcn(hObject, eventdata, handles, varargin) 
... 
... 
guidata(hObject, handles); 




function listbox_runden_stelle_Callback(hObject, eventdata, handles) 
contents=cellstr(get(hObject,'String')); 
popupmenu_runden_stelle=contents(get(hObject,'Value')); 
if (strcmp(popupmenu_runden_stelle,'10')) 
    y=1; 
elseif (strcmp(popupmenu_runden_stelle,'100')) 
    y=2; 
end 
handles.y=y; 
guidata(hObject, handles); 

答えて

0

クイックフィックス(しかしとてもきれいではない)を入力として、あなたのポップアップメニューにハンドルをOpeningfunctionにlistbox_runden_stelle_Callbackあなたを呼び出すことである可能性があります。

listbox_runden_stelle_Callback(handles.listbox_runden_stelle, [], handles) 

より一般的な答え:MATLABは、Uicontrolの(ポップアップメニュー)を作成するときに、実行されCreateFcnを使用することができます。以下はCreateFncCallback両方が

function PopupMenu() 

figure; 
uicontrol(... 
    'Style', 'popup', ... 
    'String', {'Hello', 'World'}, ... 
    'CreateFcn', @PopupMenuCreateFcn, ... 
    'Callback', @PopupMenuCallback); 

function PopupMenuCallback(hObject, ~) 
disp('In Callback()') 
PopupMenuEvaluate(hObject); 

function PopupMenuCreateFcn(hObject, ~) 
disp('In CreateFcn()') 
PopupMenuEvaluate(hObject); 

function PopupMenuEvaluate(popupMenu) 
fprintf('Evaluated "%s" \n', popupMenu.String{popupMenu.Value}) 

共通の評価関数を呼び出す簡単な例(古いMatlabのバージョンを使用している場合は、交換する必要がある場合があります「〜」ダミーの文字列と。(ドットであります)演算子はget(...)を使用してプロパティを取得します)

これを実行すると、ユーザがメニューから選択することなくCreateFcnが直接呼び出されます。

>> PopupMenu 
In CreateFcn() 
Evaluated "Hello" 

ユーザーなら、同じ事がCreateFcnCallbackの両方のために行う必要がある場合は、ちょうど同じ共通の機能に

uicontrol(... 
    'Style', 'popup', ... 
    'String', {'Hello', 'World'}, ... 
    'CreateFcn', @PopupMenuEvaluate, ... 
    'Callback', @PopupMenuEvaluate); 
+0

それらを結合することができる「世界

In Callback() Evaluated "World" 

を選択私はあなたの最初の迅速な修正を試みたが、それは働いたが、ただ一つのリストボックスのために。私のgui:listbox_runden_stelle_Callback(handles.listbox_runden_stelle、[]、handles)の3つのリストボックスにこれらのコマンドのうち3つを追加した場合、 listbox_auftrittswahrscheinlichkeit_Callback(handles.listbox_auftrittswahrscheinlichkeit、[]、handles); listbox_ausfallwahrsch_CreateFcn(handles.listbox_ausfallwahrsch、[]、handles); 'それは私にエラーを与える**存在しないフィールド 'y'への参照** – jdoubleu

+0

エラーが示すように、' y'は作成されません。 'if'-'elseif'の部分の比較値が本当にポップアップメニューの文字列(あなたの例では '10'と '100')にあることを確認してください。あなたはおそらく、少なくともエラーのために、あなたのコールバックに 'else'を追加するべきでしょう。あるいは、エラーラインの前にデバッグポイントを追加することから始めます。 – NLindros

関連する問題