ฉันกำลังพยายามสร้างการควบคุม Firemonkey แบบกำหนดเองซึ่งสืบทอดมาจากการควบคุม TListView
ฉันต้องการเพิ่มฟังก์ชันการทำงานบางอย่างให้กับตัวควบคุมซึ่งจะดำเนินการโดยอัตโนมัติเมื่อผู้ใช้คลิกที่ตัวควบคุม ดังนั้นเป้าหมายของฉันคือไม่ต้องระบุวิธีการ OnItemClick
ในแบบฟอร์มการควบคุมของฉัน แต่ควรเพิ่มฟังก์ชันการทำงานลงในตัวควบคุมโดยตรง
ฉันกำลังดิ้นรนเพื่อทำความเข้าใจสิ่งที่ฉันต้องทำเพื่อใช้ประโยชน์จากตัวจัดการการคลิกสำหรับ TListView
ในหัวของฉัน ฉันคิดว่าโซลูชันของฉันจะมีลักษณะคล้ายกับรหัสเทียมนี้:
//somewhere in the base TListView code
void __fastcall TListView::ClickHandler()
{
//logic for handling a click on the list view
}
//somewhere in my custom list view control
void __fastcall TMyListView::ClickHandler()
{
TListView::ClickHandler(); //call base click handler so all the normal stuff happens
//my additional logic goes here
}
อย่างไรก็ตาม ดูเหมือนว่าฉันไม่พบสิ่งใดในเอกสารเกี่ยวกับวิธีการที่ฉันควรพยายามแทนที่ หรือฉันควรดำเนินการอย่างไรเกี่ยวกับเรื่องนี้เลย
ฉันพบข้อมูลนี้เกี่ยวกับการเรียกตัวจัดการ 'Click-event' ฉันยกตัวอย่างง่ายๆดังนี้:
void __fastcall TFmListView::Click()
{
ShowMessage("This is the control's click");
}
มันใช้งานได้ดี แต่ตามเอกสารประกอบ:
ถ้าผู้ใช้ได้กำหนดตัวจัดการให้กับเหตุการณ์ OnClick ของตัวควบคุม การคลิกตัวควบคุมจะส่งผลให้เมธอดนั้นถูกเรียก
ดังนั้น ตรรกะเพิ่มเติมใดๆ ที่ฉันใส่ไว้ในเมธอด Click()
ของตัวควบคุมจะหายไปหากมีการตั้งค่าคุณสมบัติเหตุการณ์เมื่อคลิกของตัวควบคุมตัวใดตัวหนึ่ง
วิธีที่เหมาะสมในการขยายฟังก์ชันการทำงานของสิ่งที่เกิดขึ้นเมื่อมีการคลิกตัวควบคุมแบบกำหนดเองคืออะไร
Click()
ที่เรียกใช้ตัวจัดการOnClick
หากมีการกำหนดไว้ หากผู้ใช้กำหนดตัวจัดการOnClick
และคุณแทนที่Click()
ตัวจัดการของผู้ใช้จะไม่ถูกเรียก เว้นแต่Click()
ของคุณจะเรียกคลาสพื้นฐานClick()
วิธีนี้ช่วยให้คุณสามารถดำเนินการเพิ่มเติมจากรหัสของผู้ใช้ เพื่อตัดสินใจว่ารหัสของคุณจะทำงานก่อน/หลังรหัสผู้ใช้หรือไม่ และแม้กระทั่งเพื่อข้ามรหัสของผู้ใช้ - person Remy Lebeau   schedule 31.10.2015