2013-10-17 8 views
6

किसी के पास एक समय में खोले जाने से कस्टम एक्स ++ फॉर्म की एक से अधिक प्रति को रोकने के लिए कोई सुझाव/कोड स्निपेट है?डायनेमिक्स एक्स 2012 केवल एक फॉर्म ओपन की एक प्रति

बेस्ट मामला: फार्म की एक प्रति को खोलने का प्रयास है, और मूल लाभ ध्यान केंद्रित

स्वीकार्य: उपयोगकर्ता एक सूचना है कि प्रपत्र पहले से खुला है

उत्तर

10

आप फार्म के में नीचे दिए गए कोड डाल सकता है प्राप्त करता है init विधि। यदि आपके पास कोड के लिए कोई प्रश्न पूछने में संकोच नहीं करते हैं! इस प्रकार

public void init() 
{ 
    #define.CACHE_OWNER  ('MyForm') 
    #define.CACHE_KEY_INSTANCE ('Instance') 

    FormRun existingForm() 
    { 
     ; 

     if (infolog.globalCache().isSet(#CACHE_OWNER, #CACHE_KEY_INSTANCE)) 
     { 
      return infolog.globalCache().get(
       #CACHE_OWNER, #CACHE_KEY_INSTANCE); 
     } 
     return null; 
    } 

    void registerThisForm() 
    { 
     ; 

     infolog.globalCache().set(#CACHE_OWNER, #CACHE_KEY_INSTANCE, this); 
    } 

    boolean isAlreadyOpened() 
    { 
     ; 

     return existingForm() ? !existingForm().closed() : false; 
    } 

    void activateExistingForm() 
    { 
     ; 

     existingForm().activate(true); 
    } 
    ; 

    super(); 
    if (isAlreadyOpened()) 
    { 
     activateExistingForm(); 
     this.close(); 
    } 
    else 
    { 
     registerThisForm(); 
    } 
} 
+1

यह अच्छी तरह से काम करता है। मुझे सक्रिय विधि को element.existingForm() में सेट करना होगा। SetActive(); सक्रिय() कमांड मूल रूप को सामने नहीं लाया। बहुत बहुत धन्यवाद! – Brad

0

फार्म के init विधि में निम्न कोड जोड़ें। कोई अन्य बदलाव की आवश्यकता नहीं है।

public void init() 
{ 
    #define.CACHE_OWNER('MyForm') 
    int hWnd; 

    super(); 

    if (infolog.globalCache().isSet(#CACHE_OWNER, curUserId())) 
    { 
     hWnd = infolog.globalCache().get(#CACHE_OWNER, curUserId()); 
    } 

    if (WinApi::isWindow(hWnd)) 
    { 
     element.closeCancel(); 
     WinAPI::bringWindowToTop(hWnd); 
    } 
    else 
    { 
     infolog.globalCache().set(#CACHE_OWNER, curUserId(), element.hWnd()); 
    } 
} 
संबंधित मुद्दे