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

如何寫一段程式碼讓Label的Caption不顯示出來

答題得分者是:syntax
pia011320
一般會員


發表:11
回覆:6
積分:3
註冊:2007-07-17

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-08-10 14:04:10 IP:140.128.xxx.xxx 訂閱
 小弟寫了一段程式碼,當按下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>
編輯記錄
pia011320 重新編輯於 2007-08-10 14:05:07, 註解 無‧
pia011320 重新編輯於 2007-08-10 14:05:58, 註解 無‧
pia011320 重新編輯於 2007-08-10 14:06:39, 註解 無‧
pia011320 重新編輯於 2007-08-10 14:13:57, 註解 無‧
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-08-10 14:07:04 IP:211.22.xxx.xxx 未訂閱
Where is your code ? Show your code please !
syntax
尊榮會員


發表:26
回覆:1139
積分:1258
註冊:2002-04-23

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-08-10 14:30:35 IP:61.64.xxx.xxx 訂閱
我想你自己已經回答了這個問題

>>>當那些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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-08-10 14:38:57 IP:140.128.xxx.xxx 訂閱



感謝這位前輩點醒我,囧


不好意思,容我再問個蠢問題,delphi的空值該如何表示呢?是NIL嘛?

再次感謝

===================引 用 syntax 文 章===================
我想你自己已經回答了這個問題

>>>當那些Edit元件中的其中一個或是數個,其字串為空值時(沒有任何文字) 則不顯示該元件的後面的Label.Caption 。

不就是 if (Edit.Text <> 空值時(沒有任何文字) ) then 做你要做的事


編輯記錄
pia011320 重新編輯於 2007-08-10 14:40:55, 註解 無‧
jacike
一般會員


發表:17
回覆:22
積分:7
註冊:2003-11-17

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-08-10 15:19:09 IP:220.130.xxx.xxx 訂閱
空值=null

===================引 用 pia011320 文 章===================
感謝這位前輩點醒我,囧
不好意思,容我再問個蠢問題,delphi的空值該如何表示呢?是NIL嘛?
再次感謝


P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-08-10 18:35:07 IP:61.67.xxx.xxx 未訂閱
時間有限, 無法消化你的程式, 給你另一個方向, 善用 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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-08-10 21:54:55 IP:61.64.xxx.xxx 訂閱
你這樣不行喔!基本的東西,應該是清楚才對

空值,指標的話
Delphi = nil
C 為 NULL (以前為 0)
字串的話
Delphi = '' <--- 就是沒有東西麼
如果你怕有一堆「空白」來亂的話,可以加上 Trim(xxxx.Caption) <> ''
而如果是字串,有時有人會使用長度來判斷
Length(xxxx.caption) = 0,長度為零,就是該字串為空,不是這樣嗎?所以常常判斷方式,並非唯一


===================引 用 pia011320 文 章===================

感謝這位前輩點醒我,囧


不好意思,容我再問個蠢問題,delphi的空值該如何表示呢?是NIL嘛?

再次感謝

===================引 用 syntax 文 章===================
我想你自己已經回答了這個問題

>>>當那些Edit元件中的其中一個或是數個,其字串為空值時(沒有任何文字) 則不顯示該元件的後面的Label.Caption 。

不就是 if (Edit.Text <> 空值時(沒有任何文字) ) then 做你要做的事

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