請教如何實現 TListView 的 OnCancelEdit |
尚未結案
|
yl_huang
一般會員 ![]() ![]() 發表:6 回覆:6 積分:2 註冊:2004-11-24 發送簡訊給我 |
小弟企圖以下列程式碼, 實現類似 Windows 檔案管理員處理空檔名輸入的機制, 可惜失敗!
參考過 "TListView元件裡OnEdited相關問題", 也試了很多其它辦法, 還是不成功.
還請先進們不吝指點, 謝謝!! //---------------------------------------------------------------------------
//新增一 item 並進入 Edit mode 以提示使用者輸入字串 ← 成功
//---------------------------------------------------------------------------
void __fastcall TfmMain::miAddPlaylistClick(TObject *Sender)
{
TListItem* item = lvPlaylist->Items->Add();
item->EditCaption();
} //---------------------------------------------------------------------------
// 當輸入空字串時, 刪除此新增 item ← 失敗, 程式碼未被執行!!
//---------------------------------------------------------------------------
void __fastcall TfmMain::lvPlaylistEdited(TObject *Sender, TListItem *Item, AnsiString &S)
{
if(S.IsEmpty()){
int idx=lvPlaylist->Items->IndexOf(Item);
lvPlaylist->Items->Delete(idx);
}
}
|
m8815010
版主 ![]() ![]() ![]() ![]() ![]() 發表:99 回覆:372 積分:289 註冊:2003-11-13 發送簡訊給我 |
引言: 小弟企圖以下列程式碼, 實現類似 Windows 檔案管理員處理空檔名輸入的機制, 可惜失敗! 參考過 "TListView元件裡OnEdited相關問題", 也試了很多其它辦法, 還是不成功. 還請先進們不吝指點, 謝謝!! //--------------------------------------------------------------------------- //新增一 item 並進入 Edit mode 以提示使用者輸入字串 ← 成功 //--------------------------------------------------------------------------- void __fastcall TfmMain::miAddPlaylistClick(TObject *Sender) { TListItem* item = lvPlaylist->Items->Add(); item->EditCaption(); } //--------------------------------------------------------------------------- // 當輸入空字串時, 刪除此新增 item ← 失敗, 程式碼未被執行!! //--------------------------------------------------------------------------- void __fastcall TfmMain::lvPlaylistEdited(TObject *Sender, TListItem *Item, AnsiString &S) { if(S.IsEmpty()){ int idx=lvPlaylist->Items->IndexOf(Item); lvPlaylist->Items->Delete(idx); } }yl_huang你好< >: 嗯,問題原因如同你查的那篇,就不再解釋了< >! 作法一樣,如下: //一個button click事件,用以新增一個item void __fastcall TForm1::Button1Click(TObject *Sender) { TListItem* itm=ListView1->Items->Add(); itm->EditCaption(); } //--------------------------------------------------------------------------- //ListView的OnEdited事件,用以判斷是不是有輸入字串 void __fastcall TForm1::ListView1Edited(TObject *Sender, TListItem *Item, AnsiString &S) { if (S=="") PostMessage(ListView1->Handle,LVM_DELETEITEM,Item->Index,0); }要注意的是當使用者新增一個item後,他並沒有進行任何key in字串的動作,即結束,那麼這樣並不會驅動OnEdited事件,所以即使item的caption=="",但這個Item也不會被delete,因為OnEdited事件根本沒被驅動! 這是唯一特殊的地方,再你查的那篇也有討論到 |
yl_huang
一般會員 ![]() ![]() 發表:6 回覆:6 積分:2 註冊:2004-11-24 發送簡訊給我 |
m8815010您好
|
m8815010
版主 ![]() ![]() ![]() ![]() ![]() 發表:99 回覆:372 積分:289 註冊:2003-11-13 發送簡訊給我 |
引言: m8815010您好yl_huang你好 |
yl_huang
一般會員 ![]() ![]() 發表:6 回覆:6 積分:2 註冊:2004-11-24 發送簡訊給我 |
|
m8815010
版主 ![]() ![]() ![]() ![]() ![]() 發表:99 回覆:372 積分:289 註冊:2003-11-13 發送簡訊給我 |
yl_huang你好< >: 呵呵,好像兩人在雞同鴨講< >,不過我現在大概體會了! 你說的: 【若使用者直接按 ENTER 或 ESC (空字串), 根本攔截不到 OnEdited, 也就無法 delete 此 item 】. 這正是TListView的OnEdited事件沒辦法達到的地方,但應該是說使用者直接按enter等等等這些操作手法是無法觸發OnEdited事件的! OnEdited事件觸發只有在使用者有key in 一些字串時,而我們先前的範例在這事件內判斷Item的Caption是否為NULL,只適用使用者先key了一些字串後,再把字串全部刪除(這時caption又是NULL了),當然不適合你說的那種操作手法< >! 不過這我在注意事項有特別提及的< >! 嗯,結論是要一起concern你說的那種操作方式的話,攔訊息是正確的作法,我改了一下code,改成可直接把item刪除,並貼上完整的source,請測試
|
yl_huang
一般會員 ![]() ![]() 發表:6 回覆:6 積分:2 註冊:2004-11-24 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |