全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2129
推到 Plurk!
推到 Facebook!

如何檢查各個資料欄位是否有輸入文字

答題得分者是:T.J.B
sword185
一般會員


發表:36
回覆:81
積分:23
註冊:2002-06-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-10-08 09:40:46 IP:61.221.xxx.xxx 未訂閱
請教各位先進 我的一個From將近有10個文字方塊,現在想寫一個程式,也就是說: 1.我想檢查哪一個文字方塊沒有輸入文字 2.並顯示出哪幾個位輸入資料 3.並且將焦點設定在未輸入資料的文字方塊中 謝謝各位先進
larryleu
初階會員


發表:39
回覆:67
積分:38
註冊:2002-06-19

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-10-08 10:00:14 IP:210.202.xxx.xxx 未訂閱
提供一個範例 請參考 procedure TForm2.Table1BeforePost(DataSet: TDataSet); begin if ((DBEdit1.Text = '') or (DBEdit1.Text = Null)) then begin MessageDlg('XXX不可空白!', mtWarning, [mbOK], 0); DBEdit1.SetFocus; Abort; end; if ((DBEdit2.Text = '') or (DBEdit2.Text = Null)) then begin ShowMessage('XXX不可空白'); DBEdit2.SetFocus; Abort; end; if ((DBEdit3.Text = '') or (DBEdit3.Text = Null)) then begin ShowMessage('XXX不可空白'); DBEdit3.SetFocus; Abort; end; if ((DBEdit4.Text = '') or (DBEdit4.Text = Null)) then begin ShowMessage('XXX不可空白'); DBEdit4.SetFocus; Abort; end; if ((DBEdit5.Text = '') or (DBEdit5.Text = Null)) then begin ShowMessage('XXX不可空白'); DBEdit5.SetFocus; Abort; end; if ((DBEdit6.Text = '') or (DBEdit6.Text = Null)) then begin ShowMessage('XXX不可空白'); DBEdit6.SetFocus; Abort; end; end;
sword185
一般會員


發表:36
回覆:81
積分:23
註冊:2002-06-05

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-10-08 10:20:36 IP:61.221.xxx.xxx 未訂閱
謝謝您 但是我要的是,要顯示出哪幾筆沒有輸入資料,並且將焦點設在第一個沒有焦點上,您上面的做法可能會跑出許多方塊出來,但是我只要用一個From就可以顯示出哪幾筆,不過還是謝謝您!
Miles
尊榮會員


發表:27
回覆:662
積分:622
註冊:2002-07-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-10-08 10:51:13 IP:210.58.xxx.xxx 未訂閱
Hello : 試試這段吧    先將各個TLabel.FocusControl設定好再跑

procedure TForm1.Button1Click(Sender: TObject);
var i : integer;
    str : String;
begin
   str := '';
   for i := 0 to ComponentCount - 1 do begin
       if Components[i] is TLabel then begin
          if Assigned((Components[i] as TLabel).FocusControl) then begin
             if trim(((Components[i] as TLabel).FocusControl as TEdit).Text) = '' then begin
                str := str   (Components[i] as TLabel).Caption   #13#10;
             end;
          end;
       end;
   end;
   if str <> '' then
      str := str   '未輸入資料';
   ShowMessage(Str);
end;
------


我不是高手, 高手是正在銀幕前微笑的人.
pprayer
高階會員


發表:35
回覆:185
積分:174
註冊:2002-03-13

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-10-08 11:02:07 IP:211.21.xxx.xxx 未訂閱
假設你的文字方塊是TEDIT 我是將各TEDIT元件的NAME都設定成這樣 EDIT 欄位名稱 例如員工編號的欄位名稱是EMPNO 那麼對應的TEDIT的NAME就設定成 EDIT_EMPNO 依此類推 拉好一個TTABLE 之類的元件 盡量把需要檢查的欄位拉在一起 假設你目前有十個欄位要檢查 可以把她們擺在第零個到第九個 接下來只要跑一個迴圈檢查就可 以下的你可參考 ----------------------------------- Procedure XXX var dwCount : Integer; errMSG,strChk : String; begin errMSG : = ''; for dwCount := 0 to 9 do //這邊可能為了維護方便可以在改變得更好 begin strChk := TEdit(FindComponent('EDIT_' Table1.Fieds[dwCount]).Name).Text if strChk = '' then errMsG := errMSG '[' strChk ']' #10#13; end; if Length(errMSG) > 0 then raise Exception.Create(errMSG '以上欄位請輸入資料'); end;
T.J.B
版主


發表:29
回覆:532
積分:497
註冊:2002-08-14

發送簡訊給我
#6 引用回覆 回覆 發表時間:2002-10-08 15:04:22 IP:61.220.xxx.xxx 未訂閱
給你參考
procedure TForm1.Button1Click(Sender: TObject);
  var
    i,j : integer;
    Edtcount,s,s1 : String;
    flag : boolean;
begin
  j:=0;
  Edtcount := '';
  for i := 0 to pred(ComponentCount) do //跑迴圈找元件
  begin
    if ( Components[i] is TEdit ) then //如果是Tedit類別元件
    begin
       if ((Components[i] as TEdit).Text = '')  then 
                                       //如果該元件的Text 是空白
       begin
         Edtcount := Edtcount (Components[i] as TEdit).Name
                              '未填入資料' #10#13;
                             //就先記錄到Edtcount字串變數裡
       end;
       s:=(Components[i] as TEdit).Name;
       s1:= copy(Edtcount,1,5);
       if CompareText(s,s1) = 0 then
         (Components[i] as TEdit).SetFocus;
                                 //將focus放在沒有資料的第一個元件
    end;
  end ;        ShowMessage(Edtcount);//秀出有哪幾個元件未填入資料
end;    end.
回首來時路 也無風雨也無晴~~@.@
------
天行健
君子當自強不息~~@.@
sword185
一般會員


發表:36
回覆:81
積分:23
註冊:2002-06-05

發送簡訊給我
#7 引用回覆 回覆 發表時間:2002-10-09 08:41:13 IP:61.221.xxx.xxx 未訂閱
首先,在此先謝謝各位先進的幫忙 若我想將未輸入的文字方塊(Edit),顯示在(Label)上並且是顯示中文名稱,應該在程式碼中在加入什麼指令
Miles
尊榮會員


發表:27
回覆:662
積分:622
註冊:2002-07-12

發送簡訊給我
#8 引用回覆 回覆 發表時間:2002-10-09 09:58:26 IP:210.58.xxx.xxx 未訂閱
Hello : 1. 請問您的中文名稱指的是哪裡? 在TEdit的哪個屬性? 2. 上面幾個範例中應該都可以達成您的需求, 只要拉個TLabel稍微變一下即可.
------


我不是高手, 高手是正在銀幕前微笑的人.
sword185
一般會員


發表:36
回覆:81
積分:23
註冊:2002-06-05

發送簡訊給我
#9 引用回覆 回覆 發表時間:2002-10-09 10:18:57 IP:61.221.xxx.xxx 未訂閱
因為我From 的排列方式是 Label: Edit 例如 姓名 : □ (填入資料處) 而不是在TEdit的屬性裡
Miles
尊榮會員


發表:27
回覆:662
積分:622
註冊:2002-07-12

發送簡訊給我
#10 引用回覆 回覆 發表時間:2002-10-09 11:15:08 IP:210.58.xxx.xxx 未訂閱
Hello sword185兄: 請試試我上面的那段程式吧, 那正是你的需求.
------


我不是高手, 高手是正在銀幕前微笑的人.
pprayer
高階會員


發表:35
回覆:185
積分:174
註冊:2002-03-13

發送簡訊給我
#11 引用回覆 回覆 發表時間:2002-10-09 12:30:18 IP:211.21.xxx.xxx 未訂閱
是連資料庫的嗎? 可以利用TField.DisplayLabel
sword185
一般會員


發表:36
回覆:81
積分:23
註冊:2002-06-05

發送簡訊給我
#12 引用回覆 回覆 發表時間:2002-10-09 13:28:03 IP:61.221.xxx.xxx 未訂閱
非常感謝 Miles兄的幫忙 很冒昧的再請教您一個問題,若檢查出文字的欄位未輸入資料時, 當From 裡 還有其他的元件如 RadioButton、ComboBox、Memo元件 想再另一個From 裡顯示出來,而不是用ShowMessage的方式 例如 姓名:不能為空白 電話:不能為空白 . . . 再次的說聲非常感謝 Miles兄 發表人 - sword185 於 2002/10/09 13:46:40
Miles
尊榮會員


發表:27
回覆:662
積分:622
註冊:2002-07-12

發送簡訊給我
#13 引用回覆 回覆 發表時間:2002-10-09 13:58:26 IP:210.58.xxx.xxx 未訂閱
Hello sword185 兄你好: 在上面的程式裡有一個Str的參數, 你可以將他傳出後直接顯示出來 例如

function TForm1.ChkEditEmpty : String;
var i : integer;
    str : String;
begin
   str := '';
   for i := 0 to ComponentCount - 1 do begin
       if Components[i] is TLabel then begin
          if Assigned((Components[i] as TLabel).FocusControl) then begin
             if trim(((Components[i] as TLabel).FocusControl as TEdit).Text) = '' then begin
                str := str   (Components[i] as TLabel).Caption   #13#10;
             end;
          end;
       end;
   end;
   if str <> '' then
      str := str   '未輸入資料';
   Result := Str;    
end;    procedure TForm1.Button1Click(Sender: TObject);
var ErrChkEdit : String;
begin
   ErrChkEdit := ChkEditEmpty;
   if ErrChkEdit <> '' then begin
      Application.CreateForm(TForm2, Form2);
      Form2.Label1.Caption := ErrChkEdit;
      Form2.ShowModal;
      Form2.Free;
      Form2 := nil;
   end;
end;
------


我不是高手, 高手是正在銀幕前微笑的人.
Nicole
一般會員


發表:11
回覆:11
積分:4
註冊:2002-08-12

發送簡訊給我
#14 引用回覆 回覆 發表時間:2002-10-21 13:10:31 IP:211.75.xxx.xxx 未訂閱
先將各個TLabel.FocusControl設定好再跑    procedure TForm1.Button1Click(Sender: TObject); var i : integer;     str : String;begin    str := '';    for i := 0 to ComponentCount - 1 do begin        if Components[i] is TLabel then begin           if Assigned((Components[i] as TLabel).FocusControl) then begin if trim(((Components[i] as TLabel).FocusControl as TEdit).Text) = '' ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^   想請教的是如果我的form上面除了edit外還有別的元件,例如dblookupcombobox、memo的話,那麼此行程式或者是此段程式是否要做任何的修改呢? 因為不論我是否對其程式有無修改過都會出現Inviald class typecast這樣的錯誤訊息。不知發生什麼問題?所以請教各位高手,麻煩幫忙一下^^  謝謝    then begin                 str := str + (Components[i] as TLabel).Caption + #13#10;             end;           end;        end;    end;    if str <> '' then       str := str + '未輸入資料';    ShowMessage(Str); end; 》《
Miles
尊榮會員


發表:27
回覆:662
積分:622
註冊:2002-07-12

發送簡訊給我
#15 引用回覆 回覆 發表時間:2002-10-21 14:43:42 IP:210.58.xxx.xxx 未訂閱
Nicole 您好:    Inviald class typecast 這是型別轉換錯誤的訊息, 因為dblookupcombobox、memo都沒有Text的屬性所以會產生錯誤.若要改進的話目前小弟只想到用If..then的方式去做 例如:

if (Components[i] as TLabel).FocusControl is TEdit then begin
   if trim(((Components[i] as TLabel).FocusControl as TEdit).Text) = '' then begin
     ...
   end;
end
else if (Components[i] as TLabel).FocusControl is TMemo then begin
   if trim(((Components[i] as TLabel).FocusControl as TMemo).Lines.Text) = '' then begin
     ...
   end;
end;
另外舉個例子, 像這幾個元件都有Color屬性, 你便可以不用那麼辛苦去判斷, 直接用一種下去套, 譬如在OnEnter or OnExit的事件下
procedure TForm1.DBLookupComboBox1Enter(Sender: TObject);
begin
   TEdit(Sender).Color := clAqua;
end;
這時候不管TEdit, TMemo, TDBLookupComboBox...都能套用
------


我不是高手, 高手是正在銀幕前微笑的人.
系統時間:2024-04-27 15:37:41
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!