[問題] 用if抓出GUI中edit元件的跳行字元已回收
嗯~
其實這篇的原文是前幾篇的"跳行字元"
http://tinyurl.com/4y6v2d 這是程式(m檔案跟fig檔案)
整個程式流程是這樣
----(程式是用GUI寫的)----
1.用pop-up menu選擇次數(選項都是整數)
設為V 等下用到 程式碼也有
2.使用者在edit元件中輸入文字
3.按下button之後程式檢查輸入的行數是否跟選擇的次數一樣
(每一行都要有字但不管內容)
若不足或是有空行則跳出msgbox提醒該幾行(要列出來)需要補上文字
--------------------------------
例如(後面的程式碼註解都以此為舉例)
1.選擇
2.假設輸入結果如下
┌────┐
1│4 │→(輸入4 enter)
2│ │→(輸入enter)
3│33 │→(輸入33 enter)
4│| │→(最後游標停在這 但什麼都沒輸入) 註1
└────┘
3.按下button檢查
msgbox應該要顯示第 2 4 5 行為空白
----------------------------------
整個程式大概是這樣
流程2可能還會有其他輸入結果
例如什麼都不輸入就按button檢查 則msgbox顯示每一行(顯示每行行數)為空白 註2
我現在程式出錯的地方是黃字的部份
註1 上面的舉例 程式可以顯示2 5行空白可是不會顯示第4行空白
註2 現在我的程式只會顯示最後一行空白
還有 如果程式沒有關閉直接執行第二次 msgbox會顯示上一次的行數(僅限於edit全空白)
附上fundtion menu,edit,button的程式碼
-----
%% pop-up menu
% --- Executes on selection change in menu.
function menu_Callback(hObject, eventdata, handles)
global V;
V=get(hObject,'Value'); %照舉例 V=5
set(handles.edit,'Max',V); %本想設定成menu選多少edit就只能打多少行
%可是看不出效果 刪除也不影響結果
% --- Executes during object creation, after setting all properties.
function menu_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
%% edit
function edit_Callback(hObject, eventdata, handles)
global name;
name=get(hObject,'String'); %照舉例 size(name)為(3*2)的矩陣
% --- Executes during object creation, after setting all properties.
function edit_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
%% check
% --- Executes on button press in check.
function check_Callback(hObject, eventdata, handles)
global V;
global name;
b=size(name); %b是(1*2)的矩陣
c=b(1,1); %name裡面有c行
if (c<V)
name(V,1)=' '; %如果輸入的行數比選擇的少
%就把應該要有的最後一個元素填為一格空白
end
er=1; 下面迴圈的起始值
error1=' '; 預設值 也可避免程式錯誤
for i=1:V %menu選擇多少迴圈就跑幾次
if (name(i,1)==' '|name(i,1)=='') %若name的某行空白
er=i;
error=num2str(er); %er變字串
error1=[error1 error ' ']; %累加字串 存放所有空白的行數
er=er+1;
end
end
if er~=1
msgbox(['Line ' error1 ' is not allowed as null.'],'wrong','warn');
else
msgbox('check OK!','OK','warn');
end
error1=' '; %改回預設值
er=1; %同上
set(handles.text,'string',name); %顯示edit輸入的內容
name=' ';
set(handles.edit,'string',''); %清空edit以便下一次輸入
-------------
跟可以下載的程式碼可能略有不同@@"
問題大概是這樣……
感謝大家解惑
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.112.33.224
→
10/06 21:28, , 1F
10/06 21:28, 1F
→
10/06 21:28, , 2F
10/06 21:28, 2F
→
10/06 21:29, , 3F
10/06 21:29, 3F
MATLAB 近期熱門文章
PTT數位生活區 即時熱門文章