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

請問TreeView下如何防止重複開啟子視窗?

答題得分者是:careychen
fireflybug
一般會員


發表:18
回覆:36
積分:15
註冊:2008-07-17

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-10-13 18:03:04 IP:220.130.xxx.xxx 訂閱
請問TreeView下如何防止重複開啟子視窗?

目前能想到的方式是使用for迴圈方式一筆一筆比對Screen.Forms[i].ClassName,因為點選開啟子視窗是TFORM型態,請問如果要拿Screen.Forms[i].ClassName與開啟子視窗的TFORM型態作比對,會一直出現型態不符,是否有class型態轉string型態的函式?另外是否有更簡單的方式可完成? 現有的作法是使用變數ID:STRING 紀錄開啟子視窗時,從資料庫抓到對應的form名稱,才有辦法使用string型態作比對,達到不能重複開子視窗的功能。

[code delphi]
For i := 0 To Screen.FormCount-1 Do
Begin
if UpperCase(Screen.Forms[i].ClassName) = UpperCase(ID) then
showmessage(Screen.Forms[i].ClassName '視窗已是開啟狀態');
End;
[/code]
------
今天的事,留到後天再說....
careychen
尊榮會員


發表:41
回覆:580
積分:959
註冊:2004-03-03

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-10-13 21:38:50 IP:59.126.xxx.xxx 訂閱
覺得好玩的地方是,你知道拿 Screen.Forms[I].ClassName 來判斷,那 TForm 的部份怎麼會是拿 TForm 來比?
怎麼不使用 TForm.ClassName 比較?

不過,你從 Treeview 下點選你要開的 Form 時,這個節點他應該就有他代表的 Form ClassName 了,
應該可以直接比對,去讀資料庫再抓 Form 的名稱來比對,這樣不是很耗資源,開一個 Form 要 Query 一次

===================引 用 fireflybug 文 章===================
請問TreeView下如何防止重複開啟子視窗?

目前能想到的方式是使用for迴圈方式一筆一筆比對Screen.Forms[i].ClassName,因為點選開啟子視窗是TFORM型態,請問如果要拿Screen.Forms[i].ClassName與開啟子視窗的TFORM型態作比對,會一直出現型態不符,是否有class型態轉string型態的函式?另外是否有更簡單的方式可完成? 現有的作法是使用變數ID:STRING 紀錄開啟子視窗時,從資料庫抓到對應的form名稱,才有辦法使用string型態作比對,達到不能重複開子視窗的功能。

[code delphi]
For i := 0 To Screen.FormCount-1 Do
Begin
if UpperCase(Screen.Forms[i].ClassName) = UpperCase(ID) then
showmessage(Screen.Forms[i].ClassName '視窗已是開啟狀態');
End;
[/code]
------
價值的展現,來自於你用哪一個角度來看待它!!
fireflybug
一般會員


發表:18
回覆:36
積分:15
註冊:2008-07-17

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-10-14 14:10:30 IP:220.136.xxx.xxx 訂閱
對不起,因為小弟是初學者,很多地方似懂非懂.........就如大大所說,我也是覺得還要去作QUERY的動作有點多餘.............

請問大大,當我點選 TreeView 的子選單時候,我要如何抓取使用者當下點選的功能表所帶出的 TForm.ClassName ?

我看原始碼是用 TreeView.Selected.Text 抓取該子表單中文名稱,但是開啟的表單是 Form2。還望大大指點一二,謝謝。

===================引 用 careychen 文 章===================
覺得好玩的地方是,你知道拿 Screen.Forms[I].ClassName 來判斷,那 TForm 的部份怎麼會是拿 TForm 來比?
怎麼不使用 TForm.ClassName 比較?

不過,你從 Treeview 下點選你要開的 Form 時,這個節點他應該就有他代表的 Form ClassName 了,
應該可以直接比對,去讀資料庫再抓 Form 的名稱來比對,這樣不是很耗資源,開一個 Form 要 Query 一次

------
今天的事,留到後天再說....
編輯記錄
fireflybug 重新編輯於 2008-10-14 14:15:37, 註解 無‧
fireflybug 重新編輯於 2008-10-14 14:18:10, 註解 無‧
careychen
尊榮會員


發表:41
回覆:580
積分:959
註冊:2004-03-03

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-10-14 15:14:29 IP:60.248.xxx.xxx 訂閱
你是在寫管理程式? 你的樹狀結構是所有 Form 的列表
所以~~你應該去找一下 Treeview 的 OnClick 或 OnDblClick ,他應該會呼叫某一個函數,並且把你現在選擇的
Node 資料帶進去,在這個 Node 裡應該有個 Data 的屬性 (他是個 Pointer ) 有指向某個 Class 或 Record ,
可以去讀出你應該要抓出的 ClassName

下面這句是重點,找出在哪裏開出 Form2 的 ClassName 的!!
原始碼是用 TreeView.Selected.Text 抓取該子表單中文名稱,但是開啟的表單是 Form2
------
價值的展現,來自於你用哪一個角度來看待它!!
系統時間:2024-05-05 9:02:48
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!