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

多個Label物件與自訂function的呼叫?

答題得分者是:h@visli
nlj859
資深會員


發表:139
回覆:375
積分:322
註冊:2004-03-20

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-04-04 21:37:20 IP:219.81.xxx.xxx 訂閱
請問: 我有多個Label, 每個Label都傳入一個字串給一個function使用.
但是我的Label太多,一個個的輸入會很煩雜,有沒有其它的寫法,可以一次取代多個label click method的寫法?
謝謝.
void __fastcall TForm1::FindIP(AnsiString entity)
{
//.............................................
}
void __fastcall TForm1::Label9Click(TObject *Sender)
{
FindIP(Label9->Caption);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Label8Click(TObject *Sender)
{
FindIP(Label8->Caption);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Label7Click(TObject *Sender)
{
FindIP(Label7->Caption);
}

//............多個label click method.
h@visli
資深會員


發表:103
回覆:429
積分:431
註冊:2004-02-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-04-05 11:30:45 IP:116.76.xxx.xxx 未訂閱
你可以把所有的Lable的OnClick事件指到同一个事件方法去,如Label9Click
再改写一下Label9Click的代码:
void __fastcall TForm1::Label9Click(TObject *Sender)
{
FindIP(TLabel(*Sender)->Caption);
}

===================引 用 nlj859 文 章===================
請問: 我有多個Label, 每個Label都傳入一個字串給一個function使用.
但是我的Label太多,一個個的輸入會很煩雜,有沒有其它的寫法,可以一次取代多個label click method的寫法?
謝謝.
void __fastcall TForm1::FindIP(AnsiString entity)
{
//.............................................
}
void __fastcall TForm1::Label9Click(TObject *Sender)
{
FindIP(Label9->Caption);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Label8Click(TObject *Sender)
{
FindIP(Label8->Caption);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Label7Click(TObject *Sender)
{
FindIP(Label7->Caption);
}

//............多個label click method.
------
------------------------
博采眾家之長,奉獻綿薄之力
------------------------
nlj859
資深會員


發表:139
回覆:375
積分:322
註冊:2004-03-20

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-04-05 16:57:50 IP:219.81.xxx.xxx 訂閱
"把所有的Lable的OnClick事件指到同一个事件方法去"
==>請問可以再詳細說明該怎麼寫嗎?
謝謝

===================引 用 h@visli 文 章===================
你可以把所有的Lable的OnClick事件指到同一个事件方法去,如Label9Click
再改写一下Label9Click的代码:
void __fastcall TForm1::Label9Click(TObject *Sender)
{
FindIP(TLabel(*Sender)->Caption);
}
h@visli
資深會員


發表:103
回覆:429
積分:431
註冊:2004-02-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-04-06 11:21:29 IP:116.76.xxx.xxx 未訂閱
就是说,你在Object Inspector的Events标签中,把所有Label的OnClick事件选择为某一个Label的Click事件。

我没有C Builder,用Delphi做了个例子:

源代码:
[code delphi]
//......
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TForm1 }
procedure TForm1.FindIP(entity: AnsiString);
begin
//
end;
procedure TForm1.Label1Click(Sender: TObject); //把其它Label的Click事件都设置为Label1Click
begin
FindIP(TLabel(Sender).Caption);
//or
//FindIP((Sender as TLabel).Caption);
end;
end.
[/code]

窗体文件:


object Form1: TForm1
Left = 192
Top = 107
Width = 142
Height = 145
Caption = 'Form1'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object Label1: TLabel
Left = 32
Top = 32
Width = 31
Height = 13
Caption = 'Label1'
OnClick = Label1Click
end
object Label2: TLabel
Left = 32
Top = 56
Width = 31
Height = 13
Caption = 'Label2'
OnClick = Label1Click
end
object Label3: TLabel
Left = 32
Top = 80
Width = 31
Height = 13
Caption = 'Label3'
OnClick = Label1Click
end
end

------
------------------------
博采眾家之長,奉獻綿薄之力
------------------------
編輯記錄
h@visli 重新編輯於 2008-04-06 11:22:51, 註解 無‧
h@visli 重新編輯於 2008-04-06 11:23:44, 註解 無‧
nlj859
資深會員


發表:139
回覆:375
積分:322
註冊:2004-03-20

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-04-06 20:47:17 IP:219.80.xxx.xxx 訂閱
[code cpp]
void __fastcall TForm1::Label1Click(TObject *Sender)
{
FindIP(TLabel(*Sender)->Caption);
}
[/code]
上述都會出現compile error,正確的寫法應該怎麼做?
[C Error] Unit1.cpp(96): E2285 Could not find a match for 'TLabel::TLabel(TObject)'
[C Error] Unit1.cpp(96): E2459 VCL style classes must be constructed using operator new
daldal
高階會員


發表:6
回覆:102
積分:226
註冊:2007-06-18

發送簡訊給我
#6 引用回覆 回覆 發表時間:2008-04-08 12:03:49 IP:220.130.xxx.xxx 訂閱
BCB改成這樣子就可以了,或是用dynamic_cast也行 

[code cpp]
void __fastcall TForm1::Label1Click(TObject *Sender)
{
FindIP(((TLabel*)Sender)->Caption);
}
[/code]

[code cpp]
void __fastcall TForm1::Label1Click(TObject *Sender)
{
FindIP(dynamic_cast(Sender)->Caption);
}
[/code]
brook
資深會員


發表:57
回覆:323
積分:371
註冊:2002-07-12

發送簡訊給我
#7 引用回覆 回覆 發表時間:2008-04-09 08:25:59 IP:118.168.xxx.xxx 訂閱
這是我之前Button的寫法,希望對你有幫助.
[code cpp]
AnsiString ss;
TComponent *TheComponent;
for (int i=2;i<=10;i )
{
ss = "Button";
ss = ss i;
TheComponent = FindComponent(ss);
if (TheComponent)
{
((TButton*)TheComponent)->Caption = ss;
((TButton*)TheComponent)->Visible = true;
((TButton*)TheComponent)->OnClick = Button1Click;
((TButton*)TheComponent)->Tag = i;
}
}
[/code]

p.s. ((TButton*)TheComponent)->OnClick = Button1Click;
不知這行為什麼會變掉. forbidden 改 OnClick
編輯記錄
brook 重新編輯於 2008-04-09 08:30:51, 註解 無‧
brook 重新編輯於 2008-04-09 08:31:51, 註解 無‧
brook 重新編輯於 2008-04-09 08:33:16, 註解 無‧
系統時間:2024-05-02 23:16:49
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!