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

请问重名对象怎么建立?

答題得分者是:P.D.
rainxie
一般會員


發表:20
回覆:27
積分:14
註冊:2008-03-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-08-02 17:04:50 IP:58.38.xxx.xxx 訂閱
有两个单元创建了同名的对象,比如都叫Tmytype,这两个单元我都要Use,请问我怎么建立某个单元的Tmytype的实例?

这两个单元比较复杂,我不大会把其中一个Tmytype改名,怕出错,呵呵呵

不好意思,问这样个初级问题,期待您的指教,谢谢!
編輯記錄
rainxie 重新編輯於 2008-08-02 17:06:01, 註解 無‧
P.D.
版主


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-08-02 22:20:21 IP:116.59.xxx.xxx 未訂閱
其實無須改名, Delphi自然會分辨兩組物件, 只要遵循下列的要求

假設
unit1.TMyType

unit2:TMyType

1.要使用那一組TMyType 只要前面加入該 unit的名稱, 例如 unit1.TMyType 或 unit2.TMyType 就不會錯
2.避免使用
with unit1 do begin
TMyType.....
end;
因為這樣Delphi會無法分辨該用 unit1 或 unit2

以上是基於你不會改名的變通方式, 當然最好還是改一下名稱, 倒不是不可同名的問題, 而是你自己日後在Debug時會增加困難度
rainxie
一般會員


發表:20
回覆:27
積分:14
註冊:2008-03-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-08-03 09:51:35 IP:58.38.xxx.xxx 訂閱
谢谢版主的回复,我试过您这种办法,但好像不能用在type里,比如:

type
TmainForm = class(TForm)
myType:unit1.TMyType;
private
public
end;

会报这样的错误:期待“;”,却出现了“.”。

这里该如何写呢?

===================引 用 P.D. 文 章===================
其實無須改名, Delphi自然會分辨兩組物件, 只要遵循下列的要求

假設
unit1.TMyType

unit2:TMyType

1.要使用那一組TMyType 只要前面加入該 unit的名稱, 例如 unit1.TMyType 或 unit2.TMyType 就不會錯
2.避免使用
with unit1 do begin
TMyType.....
end;
因為這樣Delphi會無法分辨該用 unit1 或 unit2

以上是基於你不會改名的變通方式, 當然最好還是改一下名稱, 倒不是不可同名的問題, 而是你自己日後在Debug時會增加困難度
rainxie
一般會員


發表:20
回覆:27
積分:14
註冊:2008-03-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-08-03 09:54:35 IP:58.38.xxx.xxx 訂閱
其实是DSPack与显示PNG控件的两个单元的TFilter重名,不敢改他们的代码,呵呵呵
P.D.
版主


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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-08-04 00:07:02 IP:116.59.xxx.xxx 未訂閱
不知道有沒有誤解你的意思, 看一下這個 sample, 有沒有辦法做成如此
http://delphi.ktop.com.tw/board.php?cid=31&fid=97&tid=94753
rainxie
一般會員


發表:20
回覆:27
積分:14
註冊:2008-03-13

發送簡訊給我
#6 引用回覆 回覆 發表時間:2008-08-04 09:12:55 IP:116.226.xxx.xxx 訂閱
真是很感谢您!

可能是我没讲清楚,让您误解了,不好意思。

假设Tmytype是一个可视控件,我从控件组上拉一个过来(假设这个控件属于unit1),delphi就会在下面里增加下述代码,并在uses里增加unit1.


type
TForm3 = class(TForm)
Button1: TButton;
Button2: TButton;
Edit1: TEdit;
Label1: TLabel;
mytype1:TMtype;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

然后我又要用unit2,所以又uses了unit2(可能我并不会用unit2的TMytype,但会用其他某些东西),因为TMytype重复,编译就会报错:大致是找不到TMtype。希望我讲清楚了,呵呵呵
P.D.
版主


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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2008-08-06 16:01:27 IP:61.67.xxx.xxx 未訂閱
既是一個可視控件, 其實Delphi本身就可以分辦了啊!
當你在 unit1(Form1)上拉了一個 TmyType 的vcl, 在form11 的 properity name 必為 myType1, 是一個public屬性的東西
在 unit2(Form2)使用時, 直接 uses unit1, 然後在Form2中要使用就是Form1.myType1 就可以了
這就像是TQuery 在兩個Form1, Form2 建立Query1, Query1 引用一樣, Form1.Query1 與 Form2.Query1, 這是不衝突!
===================引 用 rainxie 文 章===================
真是很感谢您!

可能是我没讲清楚,让您误解了,不好意思。

假设Tmytype是一个可视控件,我从控件组上拉一个过来(假设这个控件属于unit1),delphi就会在下面里增加下述代码,并在uses里增加unit1.


type
TForm3 = class(TForm)
Button1: TButton;
Button2: TButton;
Edit1: TEdit;
Label1: TLabel;
mytype1:TMtype;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

然后我又要用unit2,所以又uses了unit2(可能我并不会用unit2的TMytype,但会用其他某些东西),因为TMytype重复,编译就会报错:大致是找不到TMtype。希望我讲清楚了,呵呵呵
系統時間:2024-04-28 20:01:09
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!