如何寫一段程式碼讓Label的Caption不顯示出來 |
答題得分者是:syntax
|
pia011320
一般會員 ![]() ![]() 發表:11 回覆:6 積分:3 註冊:2007-07-17 發送簡訊給我 |
小弟寫了一段程式碼,當按下Button時,可以將數個Edit元件中的字串及每一個Edit元件後面的擺放的Label元件的
Caption"一起"輸出到ListBox中。 可是遇到一個問題:當那些Edit元件中的其中一個或是數個,其字串為空值時(沒有任何文字) 則不顯示該元件的後 面的Label.Caption 。 請問各位前輩,程式碼要如何寫才能達成上述的功能? 這是有問題的部份 <textarea class="delphi" rows="10" cols="60" name="code">procedure TForm1.Button2Click(Sender: TObject); begin ListBox2.Items.Add(Edit3.Text ComboBox1.Text '' ComboBox2.Text '' ComboBox3.Text edit1.Text label1.Caption edit2.Text label2.Caption ComboBox4.Text '' label3.Caption);//將完整地址轉為listbox2.items的項目 end; </textarea> 這是程式完整的程式碼 <textarea class="delphi" rows="10" cols="60" name="code">unit openadd; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm1 = class(TForm) OpenDialog1: TOpenDialog; Button1: TButton; ListBox1: TListBox; ComboBox1: TComboBox; ComboBox2: TComboBox; ComboBox3: TComboBox; Button2: TButton; ListBox2: TListBox; Panel1: TPanel; Label2: TLabel; Label3: TLabel; Label1: TLabel; Edit3: TEdit; Label4: TLabel; Edit4: TEdit; Edit1: TEdit; Edit5: TEdit; Label5: TLabel; Edit2: TEdit; Edit6: TEdit; Label6: TLabel; Edit7: TEdit; Label7: TLabel; Edit8: TEdit; Edit9: TEdit; Label8: TLabel; procedure Button1Click(Sender: TObject); procedure ComboBox1Change(Sender: TObject); procedure Button2Click(Sender: TObject); procedure ComboBox2Change(Sender: TObject); procedure ComboBox3Change(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; txt: textfile; implementation uses CBChange; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin //ComboBox1.Clear; LoadData(OpenDialog1,ListBox1,ComboBox1); //當ComboBox3Change時執行'LoadData'這個程序 end; procedure TForm1.ComboBox1Change(Sender: TObject); begin // ComboBox2.Clear; // ComboBox3.Clear; // edit3.Clear; // CBChanges(ComboBox1.text,ListBox1,ComboBox2); CBChanges(ComboBox1.text,ListBox1,ComboBox2,ComboBox3,Edit3); end; procedure TForm1.Button2Click(Sender: TObject); begin ListBox2.Items.Add(Edit3.Text ComboBox1.Text '' ComboBox2.Text '' ComboBox3.Text edit1.Text label1.Caption edit2.Text label2.Caption ComboBox4.Text '' label3.Caption);//將完整地址轉為listbox2.items的項目 end; procedure TForm1.ComboBox2Change(Sender: TObject); begin //proceCB2Changes(u: string; LB: TListBox; CB: TComboBox; ED: TEdit); CB2Changes(ComboBox1.text ComboBox2.text,ListBox1,ComboBox3,Edit3);//必須按照自訂procedure參數的順序填入規定的值 end; procedure TForm1.ComboBox3Change(Sender: TObject); begin CB3Changes(ComboBox1.text ComboBox2.text ComboBox3.text,ListBox1,Edit4); //當ComboBox3Change時執行'CB3Changes'這個程序 end; end. </textarea> 這是程式所引用的的Unit <textarea class="delphi" rows="10" cols="60" name="code"> unit CBChange; interface uses StdCtrls, Dialogs; //先將所要執行的程式及所需的元件寫成如下的procedure procedure CBChanges(s: string; LB: TListBox; CB: TComboBox; CBa: TComboBox; ED: TEdit); procedure LoadData(OD: TOpenDialog; LB: TListBox; CB: TComboBox); procedure CB2Changes(u: string; LB: TListBox; CB: TComboBox; ED: TEdit); procedure CB3Changes(u: string; LB: TListBox; ED: TEdit); implementation procedure LoadData(OD: TOpenDialog; LB: TListBox; CB: TComboBox); var txt: textfile; s : string; i : integer; begin CB.Clear; if OD.Execute then begin AssignFile(txt,OD.FileName); reset(txt); while not eof(txt) do begin readln(txt,s); LB.Items.Add(copy(s, 1, 35)); end; for i:=0 to LB.Items.Count -1 do begin s:=copy(LB.Items[i],6,6); if CB.Items.IndexOf(s)=-1 then CB.Items.Add(s); end; end; end; procedure CBChanges(s: string; LB: TListBox; CB: TComboBox; CBa: TComboBox; ED: TEdit); var i,j : integer; t : string; begin CB.Clear; CBa.Clear; ED.Clear; for i:=0 to LB.Items.Count-1 do //迴圈範圍從0到listbox.items的最後一個項目,然後執行下面的判斷式 begin if pos(s,LB.Items[i])=6 then begin j:=i; break; end; end; for i:= j to LB.Items.Count-1 do //迴圈範圍從j到listbox.items的最後一個項目,然後執行下面的判斷式 begin if pos(s,LB.Items[i])=6 then begin t:=copy(LB.Items[i],12,6); if CB.Items.IndexOf(t)=-1 then CB.Items.Add(t); end else break; end; end; procedure CB2Changes(u: string; LB: TListBox; CB: TComboBox; ED: TEdit); var k,l:integer; v:string; begin CB.Clear; //u:= CB.text CB.Text; for k:= 0 to LB.Items.Count-1 do //迴圈範圍從0到listbox.items的最後一個項目,然後執行下面的判斷式 begin if pos(u,LB.Items[k])=6 then begin l:=k; ED.Text:=copy(LB.Items[k],1,3);//判斷第6個字開始的內容之後,將對應該字串的前3字元顯示在edit3元件裡的text中 break; end; end; for k:=l to LB.Items.Count-1 do begin if pos(u,LB.Items[k])=6 then //判斷"u"字串是否在listbox1.items第k行的位址 begin v:=copy(LB.Items[k],18,18);//變數v為listbox1.items第k行中的第18字元後面12字元的內容 if CB.Items.IndexOf(v)=-1 then CB.Items.Add(v); ED.Text:=copy(LB.Items[k],1,3); end else break; end; end; procedure CB3Changes(u: string; LB: TListBox; ED: TEdit); var k:integer; begin //u:=CB.text CB.Text CB.Text; for k:= 0 to LB.Items.Count-1 do //迴圈範圍從0到listbox.items的最後一個項目,然後執行下面的判斷式 begin if pos(u,LB.Items[k])=6 then begin ED.Text:=copy(LB.Items[k],4,2);//判斷第6個字開始的內容之後,將對應該字串的前3字元顯示在edit4元件裡的text中 break; end; end; end; end. </textarea> |
Stallion
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:52 回覆:1600 積分:1995 註冊:2004-09-15 發送簡訊給我 |
|
syntax
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:26 回覆:1139 積分:1258 註冊:2002-04-23 發送簡訊給我 |
我想你自己已經回答了這個問題
>>>當那些Edit元件中的其中一個或是數個,其字串為空值時(沒有任何文字) 則不顯示該元件的後面的Label.Caption 。 不就是 if (Edit.Text <> 空值時(沒有任何文字) ) then 做你要做的事 ===================引 用 pia011320 文 章=================== 小弟寫了一段程式碼,當按下Button時,可以將數個Edit元件中的字串及每一個Edit元件後面的擺放的Label元件的 Caption"一起"輸出到ListBox中。 可是遇到一個問題:當那些Edit元件中的其中一個或是數個,其字串為空值時(沒有任何文字) 則不顯示該元件的後 面的Label.Caption 。 請問各位前輩,程式碼要如何寫才能達成上述的功能? 這是有問題的部份 <textarea name="code" cols="60" rows="10" class="delphi">procedure TForm1.Button2Click(Sender: TObject); begin ListBox2.Items.Add(Edit3.Text ComboBox1.Text '' ComboBox2.Text '' ComboBox3.Text edit1.Text label1.Caption edit2.Text label2.Caption ComboBox4.Text '' label3.Caption);//將完整地址轉為listbox2.items的項目 end; </textarea><br /> 這是程式完整的程式碼 <textarea name="code" cols="60" rows="10" class="delphi">unit openadd; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm1 = class(TForm) OpenDialog1: TOpenDialog; Button1: TButton; ListBox1: TListBox; ComboBox1: TComboBox; ComboBox2: TComboBox; ComboBox3: TComboBox; Button2: TButton; ListBox2: TListBox; Panel1: TPanel; Label2: TLabel; Label3: TLabel; Label1: TLabel; Edit3: TEdit; Label4: TLabel; Edit4: TEdit; Edit1: TEdit; Edit5: TEdit; Label5: TLabel; Edit2: TEdit; Edit6: TEdit; Label6: TLabel; Edit7: TEdit; Label7: TLabel; Edit8: TEdit; Edit9: TEdit; Label8: TLabel; procedure Button1Click(Sender: TObject); procedure ComboBox1Change(Sender: TObject); procedure Button2Click(Sender: TObject); procedure ComboBox2Change(Sender: TObject); procedure ComboBox3Change(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; txt: textfile; implementation uses CBChange; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin //ComboBox1.Clear; LoadData(OpenDialog1,ListBox1,ComboBox1); //當ComboBox3Change時執行'LoadData'這個程序 end; procedure TForm1.ComboBox1Change(Sender: TObject); begin // ComboBox2.Clear; // ComboBox3.Clear; // edit3.Clear; // CBChanges(ComboBox1.text,ListBox1,ComboBox2); CBChanges(ComboBox1.text,ListBox1,ComboBox2,ComboBox3,Edit3); end; procedure TForm1.Button2Click(Sender: TObject); begin ListBox2.Items.Add(Edit3.Text ComboBox1.Text '' ComboBox2.Text '' ComboBox3.Text edit1.Text label1.Caption edit2.Text label2.Caption ComboBox4.Text '' label3.Caption);//將完整地址轉為listbox2.items的項目 end; procedure TForm1.ComboBox2Change(Sender: TObject); begin //proceCB2Changes(u: string; LB: TListBox; CB: TComboBox; ED: TEdit); CB2Changes(ComboBox1.text ComboBox2.text,ListBox1,ComboBox3,Edit3);//必須按照自訂procedure參數的順序填入規定的值 end; procedure TForm1.ComboBox3Change(Sender: TObject); begin CB3Changes(ComboBox1.text ComboBox2.text ComboBox3.text,ListBox1,Edit4); //當ComboBox3Change時執行'CB3Changes'這個程序 end; end. </textarea><br /> 這是程式所引用的的Unit <textarea name="code" cols="60" rows="10" class="delphi">unit CBChange; interface uses StdCtrls, Dialogs; //先將所要執行的程式及所需的元件寫成如下的procedure procedure CBChanges(s: string; LB: TListBox; CB: TComboBox; CBa: TComboBox; ED: TEdit); procedure LoadData(OD: TOpenDialog; LB: TListBox; CB: TComboBox); procedure CB2Changes(u: string; LB: TListBox; CB: TComboBox; ED: TEdit); procedure CB3Changes(u: string; LB: TListBox; ED: TEdit); implementation procedure LoadData(OD: TOpenDialog; LB: TListBox; CB: TComboBox); var txt: textfile; s : string; i : integer; begin CB.Clear; if OD.Execute then begin AssignFile(txt,OD.FileName); reset(txt); while not eof(txt) do begin readln(txt,s); LB.Items.Add(copy(s, 1, 35)); end; for i:=0 to LB.Items.Count -1 do begin s:=copy(LB.Items[i],6,6); if CB.Items.IndexOf(s)=-1 then CB.Items.Add(s); end; end; end; procedure CBChanges(s: string; LB: TListBox; CB: TComboBox; CBa: TComboBox; ED: TEdit); var i,j : integer; t : string; begin CB.Clear; CBa.Clear; ED.Clear; for i:=0 to LB.Items.Count-1 do //迴圈範圍從0到listbox.items的最後一個項目,然後執行下面的判斷式 begin if pos(s,LB.Items[i])=6 then begin j:=i; break; end; end; for i:= j to LB.Items.Count-1 do //迴圈範圍從j到listbox.items的最後一個項目,然後執行下面的判斷式 begin if pos(s,LB.Items[i])=6 then begin t:=copy(LB.Items[i],12,6); if CB.Items.IndexOf(t)=-1 then CB.Items.Add(t); end else break; end; end; procedure CB2Changes(u: string; LB: TListBox; CB: TComboBox; ED: TEdit); var k,l:integer; v:string; begin CB.Clear; //u:= CB.text CB.Text; for k:= 0 to LB.Items.Count-1 do //迴圈範圍從0到listbox.items的最後一個項目,然後執行下面的判斷式 begin if pos(u,LB.Items[k])=6 then begin l:=k; ED.Text:=copy(LB.Items[k],1,3);//判斷第6個字開始的內容之後,將對應該字串的前3字元顯示在edit3元件裡的text中 break; end; end; for k:=l to LB.Items.Count-1 do begin if pos(u,LB.Items[k])=6 then //判斷"u"字串是否在listbox1.items第k行的位址 begin v:=copy(LB.Items[k],18,18);//變數v為listbox1.items第k行中的第18字元後面12字元的內容 if CB.Items.IndexOf(v)=-1 then CB.Items.Add(v); ED.Text:=copy(LB.Items[k],1,3); end else break; end; end; procedure CB3Changes(u: string; LB: TListBox; ED: TEdit); var k:integer; begin //u:=CB.text CB.Text CB.Text; for k:= 0 to LB.Items.Count-1 do //迴圈範圍從0到listbox.items的最後一個項目,然後執行下面的判斷式 begin if pos(u,LB.Items[k])=6 then begin ED.Text:=copy(LB.Items[k],4,2);//判斷第6個字開始的內容之後,將對應該字串的前3字元顯示在edit4元件裡的text中 break; end; end; end; end. </textarea> |
pia011320
一般會員 ![]() ![]() 發表:11 回覆:6 積分:3 註冊:2007-07-17 發送簡訊給我 |
|
jacike
一般會員 ![]() ![]() 發表:17 回覆:22 積分:7 註冊:2003-11-17 發送簡訊給我 |
|
P.D.
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
時間有限, 無法消化你的程式, 給你另一個方向, 善用 FindComponent 功能
例如, 假設有10組Edit1~Edit10) Tform1.button1Click(Sender:TObject) var myedit: TEdit; i: integer; begin ..... for i:= 1 to 10 do begin myedit:= TEdit(FindComponent('EDIT' InttoStr(i))); if myedit.Text<>'' then begin ... 做你的事情 end; end; end; 我不做TLabel的功能, 其實比照辦理即可 |
syntax
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:26 回覆:1139 積分:1258 註冊:2002-04-23 發送簡訊給我 |
你這樣不行喔!基本的東西,應該是清楚才對
空值,指標的話 Delphi = nil C 為 NULL (以前為 0) 字串的話 Delphi = '' <--- 就是沒有東西麼 如果你怕有一堆「空白」來亂的話,可以加上 Trim(xxxx.Caption) <> '' 而如果是字串,有時有人會使用長度來判斷 Length(xxxx.caption) = 0,長度為零,就是該字串為空,不是這樣嗎?所以常常判斷方式,並非唯一 ===================引 用 pia011320 文 章=================== 感謝這位前輩點醒我,囧 不好意思,容我再問個蠢問題,delphi的空值該如何表示呢?是NIL嘛? 再次感謝 ===================引 用 syntax 文 章=================== 我想你自己已經回答了這個問題 >>>當那些Edit元件中的其中一個或是數個,其字串為空值時(沒有任何文字) 則不顯示該元件的後面的Label.Caption 。 不就是 if (Edit.Text <> 空值時(沒有任何文字) ) then 做你要做的事 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |