delphi कॉमबो बॉक्स ऑन चेंज इवेंट तब होता है जब कोड में ItemIndex गुण बदलते हैं




events combobox (2)

इस समस्या से निपटने का सही तरीका पहले पता करना है कि OnChange हैंडलर कहां से फोन किया जा रहा है यह TCustomComboBox.DoChange() विधि में किया जा रहा है।

तो, आपको क्या करने की आवश्यकता है:

  1. OnChange ईवेंट विधि को आग लगाने के लिए डिफ़ॉल्ट DoChange() विधि को ओवरराइड करें

  2. भिन्न तर्क का उपयोग करने के लिए ItemIndex प्रॉपर्टी सेटर को ओवरराइड करें जो DoChange() विधि को कॉल नहीं करेगा।

इन दोनों तरीकों के लिए आपको अपने संशोधित ComboBox लिए एक नया वर्ग बनाना होगा।

मैं डेल्फी 10.1 बर्लिन पर एफएमएक्स का उपयोग कर रहा हूं।

मैंने इसे पढ़ा (जो कि मैं चाहता हूं कि वह व्यवहार):

https://stackoverflow.com/a/42933567/1343976

ItemIndex प्रोग्रामिंग बदलना ItemIndex चेंज इवेंट में नहीं होता है। यह केवल उपयोगकर्ता के इंटरैक्शन के जवाब में आग लगाता है

क्या यह केवल वीसीएल के लिए सच है?

मैं इसके लिए पूछ रहा हूँ क्योंकि, दुर्भाग्य से मेरे लिए, जो मैं परीक्षण कर सकता हूं, कोड में ItemIndex प्रॉपर्टी को संशोधित करते हुए OnChange ईवेंट को चालू करता है

यदि यह सत्य है, तो मैं फ़ायरमोनकी में वीसीएल के समान व्यवहार कैसे प्राप्त कर सकता हूं?


क्या यह केवल वीसीएल के लिए सच है?

एफएमएक्स में कई चीजों को एक अलग तरीके से संभाला जाता है

यदि यह सत्य है, तो मैं फ़ायरमोनकी में वीसीएल के समान व्यवहार कैसे प्राप्त कर सकता हूं?

एक सामान्य समाधान ItemIndex बदलने से पहले ItemIndex इवेंट प्रॉपर्टी को शून्य करना है, और बाद में ईवेंट को पुनर्स्थापित करना है।

ऐसा करने के लिए एक साधारण दिनचर्या ऐसा कुछ समय लगेगा (जैसा कि रेमी द्वारा दिया गया है):

procedure SetItemIndex(ix : Integer; cb: TComboBox);
var
  original : TNotifyEvent;
begin
  original := cb.OnChange;
  cb.OnChange := nil;
  try
    cb.ItemIndex := ix;
  finally
    cb.OnChange := original;
  end;
end;  




firemonkey