3

チェックマークに応じてプロパティを更新する SciLab で GUI を設計しようとしています。例: チェックボックスは、コールバック中に複数のテキスト ボックスの背景を有効にして変更する場合があります。または、プッシュボタンでは、特定の数のチェックボックスを選択する必要がある場合があります。

私の問題は、コールバック中のチェックボックスの状態に応じて命令を実行するためのフロー制御ステートメントを開発できないように見えることです。私の現在の UIControl 要素は次のようになります。

handles.chkS11En=uicontrol(f,'unit','normalized','BackgroundColor',[0.8,0.8,0.8],'Enable','on','FontAngle','normal','FontName','helvetica','FontSize',[12],'FontUnits','points','FontWeight','normal','ForegroundColor',[0,0,0],'HorizontalAlignment','center','ListboxTop',[],'Max',[1],'Min',[0],'Position',[0.02140625,0.791119360625398,0.0803125,0.0369667],'Relief','flat','SliderStep',[0.01,0.1],'String','S11','Style','checkbox','Value',[0],'VerticalAlignment','middle','Visible','on','Tag','chkS11En','Callback','chkS11En_callback(handles)')

チェックボックスをオンにしたときに実行されるコールバックは次のとおりです。

cS11En = findobj('tag', 'chkS11En');     // checkbox option
tS11MagUpperBound = findobj('tag', 'txtS11MagUpperBound');  //edit box that is controlled

mprintf("%d\n",cS11En.Value);
if cS11En.Value == [1] then
    mprintf("Checked = on \n");
    set(tS11MagUpperBound,'BackgroundColor',[1,1,1]);
    set(tS11MagUpperBound,"Enable",'on');
    set(cS11Save,"Enable",'on');
elseif cS11En.Value == [0] then
    mprintf("Checked = off \n");
    set(tS11MagUpperBound,'BackgroundColor',[0.8,0.8,0.8]);
    set(tS11MagUpperBound,'Enable','off');
    set(cS11Save,"Enable",'off');
end

このコードの問題は、チェックボックスを継続的に切り替えても、2 番目のパス (値 = 1) が実行されないように見えることです。次のような出力が得られます。

0
Checked = off 
0
Checked = off 
0
Checked = off 
0
Checked = off 

要素のチェックをリロードするために間違っていることはありますか? 両方のパスを実行できるようにしたいのですが、チェックボックス要素から値 1 を取得できないようです。誰にもこれに対する解決策がありますか?ありがとう!

4

2 に答える 2

1

誰かが疑問に思っていて、グーグルなどでこれを見つけた場合、これが私が修正した方法です:

フォームを閉じてスクリプトを実行しているときに、SciLab がすべての UI 変数をクリアしないことがあります。

解決策は、各プログラムの先頭に、すべての変数をクリアし、すべてのフォームを閉じ、変数を初期化する数行を追加することです。

基本的に、これを追加します:

// /////////////
// Lemon Pledge
// /////////////
mprintf("\n!!!!!!!!!!!!!!!!!!!\nCLEARING ALL VARIABLES\n!!!!!!!!!!!!!!!!!!!\n")
xdel(winsid());
clear;
clearglobal;
于 2012-10-29T17:55:09.720 に答える