2017-03-06 12 views
0

私はMATLABでGUIを作っています。これはユーザーからの数値入力を受け付け、それに応じて計算を行います。私はユーザーが数字の代わりに文字を入力するたびにエラーダイアログボックスを作成できるようにしたい。これまでのところ私は、エラーメッセージを表示するためのコードのこのビットを持っている:Matlab guiのエラーメッセージ

ed = errordlg('Please enter numbers only','Error'); set(ed, 'WindowStyle', 'modal');uiwait(ed); 

をそして、これは私がエラーメッセージを統合したいと思いメインコードのセクションです:

function roofspace_Callback(hObject, eventdata, handles) 
 
aSpace = str2double(get(hObject,'String')); %This is the user entered value for the roofspace. 
 
set(hObject,'UserData',aSpace); 
 

 
if aSpace==0 %If aSpace does not have anything then nothing is enabled. 
 
    set(findall(handles.uipanelFunds, '-property', 'enable'), 'enable', 'off'); 
 
    set(findall(handles.uipanelPanels, '-property', 'enable'), 'enable', 'off'); 
 
    set(findall(handles.uipanelUsage, '-property', 'enable'), 'enable', 'off'); 
 
    set(handles.calculate,'enable','off'); 
 
    set(hObject,'String',''); 
 
else %If aSpace hs a value then this enables the rest of the inputs. 
 
    set(findall(handles.uipanelFunds, '-property', 'enable'), 'enable', 'on'); 
 
    set(findall(handles.uipanelPanels, '-property', 'enable'), 'enable', 'on'); 
 
    set(findall(handles.uipanelUsage, '-property', 'enable'), 'enable', 'on'); 
 
    set(handles.calculate,'enable','on'); 
 
     
 
end

EDIT: 要約すると、私はそれがユーザーかどうかをチェックするように、私はこのコードのセクションに私のエラーメッセージコードを統合する方法を把握する必要があります数字が入力されている場合は、エラーメッセージが表示されます。現時点では、コードはユーザーが入力した内容に関係なくエラーメッセージを表示します。次のように

+1

いくつかの洞察...何ですか?あなたの質問は何ですか? – excaza

+0

@excaza、非数値入力がユーザーによって与えられたときにこのコードでエラーメッセージを表示するにはどうすればよいですか?現時点では、入力された内容に関係なく、エラーメッセージが表示されます。私は、これを達成するためにエラーメッセージコードをプログラムに統合する方法を知らない。 – Oreomega

+0

ユーザ入力がifループをネストする場所よりも後の数値かどうかを調べる方法をもっと見ているようだ。 (実際にあなたのコードがあるなら、if文をどこに置くべきかを知っていると確信しています)。 – BillBokeey

答えて

0

あなたはそれをチェックすることができます。

私は(ちょうどそれが説明するのが容易だから)二つの文にaSpace = str2double(get(hObject,'String'));を分割:

str = get(hObject,'String'); 
aSpace = str2double(str); 

は、私が考えることができる2つのエラーケースがあります。

  1. 入力文字列が数値ではありません。例えば、str = 'abc'aSpace
    = のNaN
    値もInfのまたは-Infかもしれません。
  2. 文字列は複素数です。
    例:str = '2 + 3i'
    aSpace = 2.0000 + 3.0000i

確認するには、次のif文を使用aSpaceでない場合はNaNはInfの-Infなく複雑数:

is_ok = isfinite(aSpace) && isreal(aSpace); 

if (~is_ok) 
    %Handle error... 
end