線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1259
推到 Plurk!
推到 Facebook!

TTreeView 編輯模式中,按 ESC ..

答題得分者是:RaynorPao
yamigo
一般會員


發表:19
回覆:41
積分:12
註冊:2002-12-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-03-14 09:05:11 IP:61.221.xxx.xxx 未訂閱
請問各位前輩們.. 小弟請教一問題,可否解答疑惑.. tn=TreeView1->Items->Add(); tn->Selected=true; tn->EditText(); 在編修模式下,不做任何動作而直接按 ESC 鍵.. TreeView1元件並不觸發 OnEdited() Event.. 請問我該如何強制觸發呢? 因為在 OnEdited Event 裏判斷若為空白..則刪除該節點.. 但我只要直接按 ESC 卻無觸發.. OnKeyDown Event在編修模式下是不觸發的.. 所以只好求助前輩們了...
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-03-14 15:22:54 IP:203.73.xxx.xxx 未訂閱
引言: 請問各位前輩們.. 小弟請教一問題,可否解答疑惑.. tn=TreeView1->Items->Add(); tn->Selected=true; tn->EditText(); 在編修模式下,不做任何動作而直接按 ESC 鍵.. TreeView1元件並不觸發 OnEdited() Event.. 請問我該如何強制觸發呢? 因為在 OnEdited Event 裏判斷若為空白..則刪除該節點.. 但我只要直接按 ESC 卻無觸發.. OnKeyDown Event在編修模式下是不觸發的.. 所以只好求助前輩們了...
yamigo 你好: 試試看這樣子可不可以呢?? < class="code"> void __fastcall TForm1::TreeView1Edited(TObject *Sender, TTreeNode *Node, AnsiString &S) { ShowMessage("Edited"); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { // 像檔案總管一樣,先在這邊檢查同一層的 node 的名稱是否有 "Node1" // 如果有的話,把下面程式碼中的 Node1 改其他的名字(例如: "Node1(2)") TTreeNode *tn; tn=TreeView1->Items->Add(NULL, "Node1"); tn->Selected=true; tn->EditText(); } -- Enjoy Researching & Developing -- 發表人 - RaynorPao 於 2003/03/14 15:45:06
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
yamigo
一般會員


發表:19
回覆:41
積分:12
註冊:2002-12-05

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-03-14 19:09:28 IP:61.221.xxx.xxx 未訂閱
RaynorPao 大大: 嗯~~您的方法之前曾試過了... 在編輯模式狀態下..若都沒按任何可見字元鍵的話.. 而直接按 ESC 是不會去觸發 OnEdited Event ... 若有隨便打幾個字,然後刪除,保持輸入框內空白.. 再按 ESC 就會去觸發 OnEdited Event ... 所以您提供的方式對我不適用... 請問還有其它方法嗎?
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-03-15 00:51:03 IP:61.221.xxx.xxx 未訂閱
引言: RaynorPao 大大: 嗯~~您的方法之前曾試過了... 在編輯模式狀態下..若都沒按任何可見字元鍵的話.. 而直接按 ESC 是不會去觸發 OnEdited Event ... 若有隨便打幾個字,然後刪除,保持輸入框內空白.. 再按 ESC 就會去觸發 OnEdited Event ... 所以您提供的方式對我不適用... 請問還有其它方法嗎?
yamigo 你好: 可是~~我試的結果是,好像並不會有空白的情況發生耶 因為一開始就已經給它一個初始名稱了,就算你先按 > 備註: 我的測試環境是
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
yamigo
一般會員


發表:19
回覆:41
積分:12
註冊:2002-12-05

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-03-18 08:33:50 IP:61.221.xxx.xxx 未訂閱
嗯~RaynorPao大大~~ 小弟是先新增一個TreeNode.. 而沒有給它初使化的名稱.. 或許您的方法(先給它一個預設值)... 也是能解決小弟的問題.. 來去試試..
yamigo
一般會員


發表:19
回覆:41
積分:12
註冊:2002-12-05

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-03-18 09:05:30 IP:61.221.xxx.xxx 未訂閱
RaynorPao大大..您的方法還是不行... 我所想要的功能是.. 假設TreeView是代表部門,而ListView代表成員.. 今天假設使用者要新增一部門.. 按下新增後,便直接可在TreeView上新增一個可讓使用者輸入的地方.. 如果使用者突然放棄新增了(但已按下新增),可按ESC取消.. 系統則要刪除那筆新增的TreeNode.. 我的程式碼如下.. void __fastcall TFormUser::btnNewClick(TObject *Sender) { TTreeNode *tn=tvDept->Items->Add(tvDept->Selected, "new dept"); tn->Selected=true; tn->EditText(); } void __fastcall TFormUser::tvDeptEdited(TObject *Sender, TTreeNode *Node, AnsiString &S) { ShowMessage(S); } ------------------------------------------------------------------- 如上...按下新增後...再直接按ESC... 程式並沒有觸發OnEdited Event.. 所以也沒有Show那個Message.. PS.我的環境 WinXP SP1、BCB 6 Update 1...
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-03-18 10:06:53 IP:203.73.xxx.xxx 未訂閱
引言: RaynorPao大大..您的方法還是不行... 我所想要的功能是.. 假設TreeView是代表部門,而ListView代表成員.. 今天假設使用者要新增一部門.. 按下新增後,便直接可在TreeView上新增一個可讓使用者輸入的地方.. 如果使用者突然放棄新增了(但已按下新增),可按ESC取消.. 系統則要刪除那筆新增的TreeNode.. 我的程式碼如下.. void __fastcall TFormUser::btnNewClick(TObject *Sender) { TTreeNode *tn=tvDept->Items->Add(tvDept->Selected, "new dept"); tn->Selected=true; tn->EditText(); } void __fastcall TFormUser::tvDeptEdited(TObject *Sender, TTreeNode *Node, AnsiString &S) { ShowMessage(S); } ------------------------------------------------------------------- 如上...按下新增後...再直接按ESC... 程式並沒有觸發OnEdited Event.. 所以也沒有Show那個Message.. PS.我的環境 WinXP SP1、BCB 6 Update 1...
yamigo 你好: 所以,你的情況是「不管怎樣」、「無論如何」 「一定要」想辦法觸發 OnEdited 事件嗎?? 如果「」的話,請參考以下的做法 < class="code"> TTreeNode *tn; tn=TreeView1->Items->Add(NULL, "Root1"); tn->Selected=true; tn->EditText(); while(TreeView1->IsEditing()) { Application->ProcessMessages(); } AnsiString s=tn->Text; TreeView1Edited(this, tn, s); -- Enjoy Researching & Developing -- 發表人 - RaynorPao 於 2003/03/18 10:37:24
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
jessechan
版主


發表:109
回覆:394
積分:254
註冊:2002-04-05

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-03-18 10:24:04 IP:203.75.xxx.xxx 未訂閱
你的問題有一個矛盾的地方, 在 TTreeView 的編輯模式中, 如果你按 ESC, 則原先編輯的會被取消, 回復原先的設定值, 所以除非原先 TTreeNode 的 Text 是空白, 不然按 ESC 是不可能有空白產生, 按 ESC 是取消編輯, 自然不會收到 Edited 的 Event. 我現在假設你在 Add 的第二個參數傳入的是空白, 然後又不輸入任何資料, 直接按 ESC, 這時你應把你的處理程式放在 OnEnter 中去檢查是否 Text 為空白, 是的話就把它刪掉, 因為當你離開 edit mode 時, 你剛編輯的 node 會觸動 OnEnter, 我在回應你的問題時不小心把你的回應刪掉了, 對不起, 如果還有問題的話請再貼上來. Jesse Chan
------
Jesse Chan
jessechan
版主


發表:109
回覆:394
積分:254
註冊:2002-04-05

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-03-18 13:11:16 IP:203.75.xxx.xxx 未訂閱
回應測試, 主頁好像沒有 update, 抱歉我不敢再刪除了. Jesse Chan
------
Jesse Chan
yamigo
一般會員


發表:19
回覆:41
積分:12
註冊:2002-12-05

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-03-18 14:30:49 IP:61.221.xxx.xxx 未訂閱
TO jessechan 大大.. 抱歉~可能我的表達詞句有點拙劣~讓您誤解了.. 小弟想做的一個功能就是~ 在 TreeView 新增一個 TreeNode .. 而使用者若都沒輸入文字的話.. 小弟則要判斷是否空白,然後刪除該節點.. 只是小弟測試的結果是, 一開始使用者必須有輸入可見字元的按鍵.. OnEdited Event 才會觸發.. 所以我寫在 OnEdited Event 裏判斷的程式才能執行.. 若使用者一開始直接就按 ESC 取消新增的話.. OnEdited Event 並不會觸發.. 也就我寫在 OnEdited Event 裏判斷的程式就沒作用了.. 所以也就必須強制去觸發 OnEdited Event 了.. 而現在問題已解決了.. 很感謝 RaynorPao 大大提供的方法.. 測試過~~沒問題了~~有達到我想要的需求~~ 謝謝 RaynorPao 大大的幫忙.. ^^    while(TreeView1->IsEditing())   原來可以這麼處理 { Application->ProcessMessages(); }
系統時間:2024-04-28 13:00:36
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!