1

MATLAB で GUI を作成しており、現在uimenu. さまざまなアクセラレータをさまざまなメニュー アクションに追加しようとしています。

(下記参照) matlabchar(10)のアクセラレータ文字として (改行)を渡すと、そのメニューのアクセラレータ ラベルとして追加されることがわかりました。問題は、ヒットしたときにコールバックが実行されないことです。uimenuCtrl+ EnterCtrl+ Enter

これが機能しない理由はありますか?何か不足していますか?Ctrl+ Enter「現在のセクションを実行」は私の呼び出しをキャンセルしていますか? その場合、上書きできますか?

MATLAB がどのように受け入れないかを示す簡単な例Ctrl+ Enter

function test
close all
f=figure;
m=uimenu(f,'Label','test');
uimenu(m,'Label','a','callback',@hittest,'Accelerator','r');
uimenu(m,'Label','b','callback',@hittest,'Accelerator',char(10));

    function hittest(h,~)
        disp(h.Label)
    end
end
4

1 に答える 1

1

あなたが述べたように、メイン アプリケーションがこのアクセラレータを登録したため、GUI がこの呼び出しをインターセプトするのを妨げているようです。

ショートカット設定ダイアログで MATLAB のキーボード ショートカットを変更してみてください。これは、MATLAB のインストールにのみ影響することに注意してください。

モードでMATLAB を起動-nodesktopすると、MATLAB IDE が IDE を起動できなくなり、アクセラレータが解放されて使用できるようになります。

matlab -nodesktop

isdeployedこれは展開されたアプリケーションになると述べたので、展開されたアプリケーションとして実行されているかどうかを常に確認するために使用できます。そうでない場合は、別のキーボード ショートカットを使用できるため、 IDE

if ~isdeployed
    % Use some other keyboard shortcut for testing
    set(hmenu, 'Accelerator', <some other key for testing>)
else
    % Use the enter key on deployed applications
    set(hmenu, 'Accelerator', char(10))
end

アプリをデプロイしたり、 matlab を実行したりするたびに-nodesktop、Enter キーを使用するようにすることもできます。

if usejava('desktop')
    % Use some other keyboard shortcut for testing
    set(hmenu, 'Accelerator', <some other key for testing>)
else
    % Use the enter key on deployed applications
    set(hmenu, 'Accelerator', char(10))
end
于 2016-08-01T15:09:48.330 に答える