2012-02-15 15 views
6

मेरे पास मेरे सेल्स ऑर्डर फॉर्म (सेल्सटेबल) में कुछ फ़ील्ड हैं जिन्हें अक्षम किया जाना चाहिए यदि कोई अन्य फ़ील्ड किसी विशिष्ट मान पर सेट हो। ऐसा करने के लिए मैंने फॉर्म फ़ील्ड पर एंटर और गॉटफोकस विधियों को ओवरराइड किया (मैंने इसे जांचने के लिए दोनों किया)। कोड संकलित करता है और इसमें कोई समस्या नहीं है।मिला फोकस और फॉर्म फ़ील्ड पर विधियों को दर्ज नहीं किया जा रहा है

मेरी समस्या यह है कि जब मैं उचित ग्रिड कॉलम में किसी फ़ील्ड पर क्लिक करता हूं तो इन ओवरराइड विधियों में से कोई भी नहीं कहा जाता है। ग्रिड फ़ील्ड पर प्रवेश और गॉटफोकस विधियों को क्यों नहीं बुलाया जाएगा?

+0

क्या आपने सुपर() कॉल से पहले या उसके बाद अपना कोड रखा था? –

+0

मैंने पहले और बाद में दोनों की कोशिश की। करने के लिए सही कौन सा है? मैंने पहले माना। साथ ही, जब भी मैं उस क्षेत्र को छोड़ देता हूं और कोड संपादित करने के लिए कहीं और जाता हूं तो मेरी विधियों को एएक्स द्वारा हटा दिया जाता है। –

+2

ऐसा इसलिए है क्योंकि 'ऑटोडाटा समूह' हां है। समूह हर रन पर बनाया गया है। –

उत्तर

8

gotFocus और enter विधियों का उपयोग न करें। (इस मामले SalesType में

public int active() 
{ 
    int ret = super(); 
    ... 
    this.setAllowEdit() 
    return ret; 
} 

कॉल डेटा स्रोत क्षेत्र से विधि:

void setAllowEdit() 
{ 
    salesTable_ds.object(fieldnum(SalesTable, Name)).allowEdit(salesTable.SalesType == SalesType::Journal); 
} 

कॉल active विधि से विधि:

परिवर्तन करने के लिए एक डेटा स्रोत विधि बनाएं फ़ील्ड):

public void modified() 
{ 
    super() 
    salesTable_ds.setAllowEdit() 
    element.changeType(); // standard code 
} 
+0

बस कुछ प्रश्न ब्राउज़ कर रहे हैं और सोच रहे हैं, परिवर्तन टाइप क्या करता है? – AnthonyBlake

+0

फॉर्म विधि 'SalesTable.changeType() 'पर एक नज़र डालें। –

+0

आह - तो यह सेल्सटेबल फॉर्म के लिए विशिष्ट है, यह ठीक है - मैंने इसे किसी अन्य रूप में कार्यान्वित किया और उम्मीद/जांच कर रहा था कि मुझे सबसे अच्छा अभ्यास नहीं मिला था। – AnthonyBlake

संबंधित मुद्दे