2012-04-24 15 views
0

私は現在、私のmatlab最終プロジェクトの学校で働いています。私はかなりプログラミングに興味があると思っていますが、Matlabにはあまりにも多くの奇妙なものがあります。Matlab GUI:変数を使用して既存のオブジェクトハンドルを参照する

基本的な質問(答えを見つけた後、これを実現) guiハンドルオブジェクトの呼び出しで変数を使用する方法 値の代わりに変数の名前を使用しないでください。言い換えれば

マイプロジェクトは簡単な表現を構築している(私はそれが私が尋ねたのではないでしょう、この単純なものでした知っていたなら)は、フィールド名で変数を使用します昔の「戦艦」ゲームの

私の問題:私は現在、船の部分に5つのオブジェクト(軸)を持っています。それらは、一度に1つずつ選択され、別の場所(グリッド)に移動されます。 私はボタンをクリックした後にセットピクセル位置を使用して各オブジェクトを移動することができます。

は今ボタンクリックの下で、私は.. 'shipAircraftCarrier' 言い換えれば、この

function btnPlaceShip_Callback(hObject, eventdata, handles) 

    %Store the current selected ship(passed from an onclick to a label) 
    ship = get(handles.lblSelectedShip,'string'); 

    %I have tried everything I could think of, but basically I want to achieve the 
    %following 

    setpixelposition(handles.ship, [0 250 50 250]) 
    %where the variable 'ship' contains the name of the object. 

のようなもの、VAR船を =持っている、と

setpixelposition(handles.shipAircraftCarrier, [0 250 50 250]) 

作品!(示された特定の船の位置を設定します)。ただし、変数の出荷を使用すると、matlabはその文字列を文字どおり取りますが、その値ではありません。代わりに変数を使用するのが非常に便利です!

誰かが解決策をお持ちの場合、私は感謝します。私はWebを精査したが、Matlab GUIの基本的な理解が不足している可能性があります.Matlabのヘルプドキュメントは非常に説明的ではなく、あまり役に立ちません。

答えて

0

他の人が述べたようにdynamic fieldnamesを使用しています。それをテストするためのコードを持っていないながら、私はすべての可能性であれば、単純にの周りに括弧を置くことはeval()関数の使用を避けるようにしてくださいので、

setpixelposition(handles.(ship), [0 250 50 250]) 

、構造名にして、文字列に置き換えますと信じています。

+0

ありがとうございます。まもなくこれを試してみます。私はこれが答えられたのを見る前に、一日中さまざまなことを試みていました!しかし、私は多くを学んだ - 私は最終的にどのようにMATLABは、このGUIのものすべてを整理して理解しています!私は自動的に生成されたコードを理解していなかったのですべてが混乱していたと思うし、それを把握するのに時間がかかりました(つまり、「ハンドル」は単なる構造配列です! – mtotho

0

あなたはeval機能を使って、これを行うことができますが、文字列の注射に注意する必要があります。

setpixelposition(eval(strcat('handles.',ship)), [0 250 50 250]) 
+0

お返事ありがとうございます。私はこれを試してみましょう他のユーザーが私はちょうど括弧内の変数を置くことができます:setpixelposition(**ハンドル。(船)**、位置)短いです。私は私のmatlabスクリプトの文字列注入について心配する必要はないと思う、特にこの変数は入力ボックスではなく、むしろGUI選択 – mtotho

0

あなたはdynamic fieldnamesgetfieldを使用することができます。識別子対文字列を使用したフィールド索引付けは、Matlab structsおよびJavascript objectsで非常によく似ています。

Matlabの:

fromId = handles.shipAircraftCarrier; %identifier 
fromString = handles.('shipAircraftCarrier'); %string 

Javascriptを:

var fromId = handles.shipAircraftCarrier; //identifier 
var fromString = handles["shipAircraftCarrier"]; //string 
+0

ありがとう!変数** shipTag **は、船のタグと等しい文字列変数です。私は使用してみます:**ハンドル。(shipTag)**代わりにhandles.shipTag – mtotho

関連する問題