2013-02-15 14 views
15

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

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

यदि नहीं, तो मेरे मुख्य प्रोजेक्ट से अपने संसाधनों को रद्द करने का प्रयास करते समय मुझे किस प्रकार की वास्तुकला पर विचार करना चाहिए? जब भी मैं कोड या दो की एक पंक्ति को संशोधित करता हूं, तो शायद 100 एमबी निष्पादन योग्य रिलीज करने का एक स्मार्ट विचार नहीं है।

उत्तर

2

सबसे अच्छा मैं बता सकता हूं, आप डिजाइनर में अन्य असेंबली से संसाधनों में हेरफेर नहीं कर सकते हैं। वर्तमान परियोजना से केवल एक ही।

यहाँ कैसे मैं यह कर देगा:

एक कक्षा लाइब्रेरी प्रोजेक्ट बनाएँ। लाइब्रेरी में, जोड़ें | नया आइटम | संसाधन फ़ाइल उस फ़ाइल में संसाधन (छवियों, आइकन) जोड़ें (उदा: संसाधन 1.resx)। उस पुस्तकालय में एक कक्षा में सार्वजनिक सदस्यों को जोड़ें जो संसाधनों को वापस कर देते हैं।

public static class Class1 
{ 
    public static Bitmap Image1 { get { return Resource1.Image1; } } 
    public static Bitmap Image2 { get { return Resource1.Image2; } } 
} 

अब आपके प्रोजेक्ट में कक्षा पुस्तकालय संदर्भित है और अब रनटाइम पर संसाधनों को प्रोग्रामेटिक रूप से सेट कर सकते हैं।

public Form1() 
{ 
    InitializeComponent(); 

    this.BackgroundImage = ClassLibrary1.Class1.Image1; 
} 

लेकिन दुर्भाग्य से आप डिजाइनर का उपयोग नहीं कर सकते हैं। :(हालांकि, ऐसा करने से आप कि dll पुनर्वितरित यदि आप इसे में संसाधनों के लिए किसी भी परिवर्तन नहीं करते हैं

2

मैं एक संसाधन परियोजना सभी एम्बेडेड जिसमें बनाना चाहते हैं जो जरूरत नहीं होगी। माउस मैं अपने आवेदन भर की जरूरत है .... मैं डिजाइनर में संसाधनों जब एक फार्म के BackgroundImage संपत्ति पर क्लिक चयन करने के लिए करना चाहते हैं।

आप किसी अन्य विधानसभा लेकिन दुर्भाग्य से संसाधन का उपयोग कर सकते नीचे बताए गए कारणों के लिए आप इसे डिजाइनर के माध्यम से नहीं कर सकते हैं।

enter image description here

अपने संसाधन परियोजना में एक picturebox के साथ एक फार्म जोड़ सकते हैं और BackgroudImage निर्धारित किया है। यह परियोजनाओं को Resouces.resx और Resouces.Designer.cs में एक छवि जोड़ने के लिए बस है। संसाधन के रूप में छवि को जोड़ा जाने के बाद हम चित्र बॉक्स के साथ फ़ॉर्म को हटा सकते हैं।

संसाधन परियोजना में Resouces.Designer पर जाएं।सीएस और जनता के लिए कक्षाएं गुंजाइश बदल सकते हैं और आंतरिक से छवि तरीकों गुंजाइश सार्वजनिक करने के लिए बदलने के लिए:

:

public static System.Drawing.Bitmap SO_down { 
    get { 
     object obj = ResourceManager.GetObject("SO down", resourceCulture); 
     return ((System.Drawing.Bitmap)(obj)); 
    } 
} 

परियोजना की खपत है कि संसाधन DLL आप BackGroundImages स्थापित करने के लिए अपने स्वयं के संसाधनों का उपयोग करने के लिए नहीं की जरूरत में पहले:

this.pictureBox1.BackgroundImage = global::WinFormWithSatelliteResources.Properties.Resources.SO_down; 

के बाद:

this.pictureBox1.BackgroundImage = global::SatResources.Properties.Resources.SO_down; 

मेरी मुख्य परियोजना से मेरे संसाधनों को डीक्यूपल करने का प्रयास करते समय मुझे किस प्रकार की वास्तुकला पर विचार करना चाहिए? यह शायद पर एक स्मार्ट विचार नहीं है जब भी मैं कोड या दो की एक पंक्ति को संशोधित करता हूं, हर बार 100 एमबी निष्पादन योग्य जारी करता है।

आजकल अधिकांश व्यवसाय इंटरनेट पर भरोसा करते हुए खुश हैं। आप जानते हैं कि आप संस्करण संसाधन कैसे बना सकते हैं, जैसे MyStyle22022013.CSS और वेबब्रोर्स संसाधन को नहीं लाएंगे यदि उनके पास पहले से ही एक अद्यतित प्रति है। मुझे एक समान रणनीति का सुझाव दिया गया है, इन सभी छवि संसाधनों को ऑनलाइन रखें ताकि आप पैकेज को पैकेज किए बिना उन्हें तैनात कर सकें।

जब आप इस बारे में सोचते हैं, तो संसाधनों से भरी असेंबली से भी परेशान क्यों? भूलभुलैया अच्छी तरह से इंटरनेट से संसाधन खींचें और उन्हें फ़ाइल सिस्टम से उपयोग करें।

यदि प्रारंभिक इंटरनेट एक्सेस (संसाधन डाउनलोड करने के लिए) एक विकल्प नहीं है @ jross उत्तर पूरी तरह व्यवहार्य लगता है। इन दिनों हालांकि मुझे कल्पना नहीं है कि आप इसे सीडी पर जारी करने की योजना बना रहे हैं।

2

मैं कई परियोजनाओं के बीच एक संसाधन फ़ाइल साझा और डिजाइनर अनुकूलता वी.एस. रखने (वी.एस. 2012 के साथ काम करता है) करने के लिए एक काम कर रास्ता मिल गया है, यह कोई जटिल है:

  1. में एक नया संसाधन फ़ाइल बनाएँ अपने स्रोत परियोजना (SharedResources.resx मेरी उदाहरण में नाम)

  2. ओपन SharedResources.resx डिज़ाइनर में और बदल Access Modifier को Public

  3. ओपन नोटपैड के साथ अपने नए प्रोजेक्ट फाइल के .csproj और <ItemGroup> में कोड जो <compile Include="MyForm.cs"> शामिल निम्नलिखित जोड़ें: (संकलन के बिना और विशेष नाम स्थान के साथ * .resx और * कड़ी के रूप में .Designer.cs शामिल होंगे)

    <EmbeddedResource Include="MY_SOURCE_PROJECT_FOLDER\Properties\SharedResources.resx"> 
        <Generator>PublicResXFileCodeGenerator</Generator> 
        <Link>SharedResources.resx</Link> 
        <LastGenOutput>SharedResources.Designer.cs</LastGenOutput> 
        <SubType>Designer</SubType> 
        <CustomToolNamespace>MY_SOURCE_PROJECT_NAMESPACE.Properties</CustomToolNamespace> 
    </EmbeddedResource> 
    <None Include="MY_SOURCE_PROJECT_FOLDER\Properties\SharedResources.Designer.cs"> 
        <AutoGen>True</AutoGen> 
        <DependentUpon>SharedResources.resx</DependentUpon> 
        <DesignTime>True</DesignTime> 
    </None> 
    
  4. संसाधनों से युक्त अपनी परियोजना के रिश्तेदार पथ के साथ MY_SOURCE_PROJECT_FOLDER बदलें और जनरेट की गई फ़ाइल SharedResources.Designer.cs में निर्दिष्ट नाम स्थान के साथ MY_SOURCE_PROJECT_NAMESPACE की जगह (अपने वैश्विक परियोजना के नाम स्थान होना चाहिए)

  5. आनंद लें!

महत्वपूर्ण:

  • आप अपने resx फ़ाइल में नए संसाधनों को जोड़ने, स्रोत परियोजना या फ़ाइल गलत फ़ोल्डर में जोड़ दिया जाएगा से खोलते हैं!
  • जब आप सिर्फ अगर यह नई परियोजना में प्रकट नहीं होता है, एक नया संसाधन जोड़ा, बस वी.एस. पुनरारंभ करें, यह काम करना चाहिए
+0

मैं कोई लाभ नहीं हुआ संबंधित पथ के साथ इस की कोशिश की। :-( – fschricker

+0

सापेक्ष पथ (.. \ projectfolder) का उपयोग करके मेरे साथ काम किया –

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