我想使用TListView(vsIcon)作爲一種選項卡 - 以便只能選擇一個項目,就像選項卡一樣。只選擇一個項目是沒有問題的(禁用Multiselect屬性)。問題是在列表視圖中點擊圖標和文本之間的空白點時取消選擇項目。在TListView控件中禁用取消選擇
這裏是我試過到目前爲止:
void __fastcall TForm::ListViewChanging(TObject *Sender, TListItem *Item, TItemChange Change, bool &AllowChange)
{
if (Change == ctState)
{
TPoint CursorRel = ListView->ScreenToClient(Mouse->CursorPos);
AllowChange = (ListView->GetItemAt(CursorRel.x, CursorRel.y) != NULL);
StatusBar->SimpleText = (AllowChange)? "YES" : "NO";
}
}
上述作品,但有一個問題。在空白區域單擊鼠標時,取消選擇該項目和鍵盤上/下箭頭不再有效,儘管該項目仍然處於選中狀態。如果我忽略鍵盤,對於鼠標選擇它可以正常工作,並忽略狀態欄中消息「NO」的空白區域的點擊。
任何想法如何解決這個問題,所以它適用於所有可能的選擇方法(鍵盤,鼠標(任何其他?))。
我覺得這一個是可用的。感謝你的回答。 – Coder12345 2011-12-30 15:33:58
@Coder - 對你的情況可能並不重要,但一般情況下,如果你不想阻止某些事情,最好防止它(如果你可以幫助它),而不是撤銷已完成的事情。用戶可以按下空白區域的按鈕,但釋放項目上的按鈕,例如.. – 2011-12-31 02:08:35
@Sertac Akyuz:從嚴格的OOP角度來看,我更傾向於基於TCustomListView或者甚至在TCustomMultiSelectListControl上滾動一個新組件,從頭開始要求具體的行爲。我根據@ Coder12345的偏好建立了我的解決方案。 – menjaraz 2011-12-31 04:31:19