[問題] 用if抓出GUI中edit元件的跳行字元已回收

看板MATLAB作者 (SuperStar)時間16年前 (2008/10/06 21:27), 編輯推噓0(003)
留言3則, 1人參與, 最新討論串1/1
嗯~ 其實這篇的原文是前幾篇的"跳行字元" 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
edit的內容是要存檔的檔名(一行一個檔) 所以不能檢查
10/06 21:28, 2F

10/06 21:29, , 3F
錯誤 如果可以檢查有沒有相同更好 不過應該也沒差
10/06 21:29, 3F
文章代碼(AID): #18wX8bPX (MATLAB)
文章代碼(AID): #18wX8bPX (MATLAB)