2009-12-03 16 views
11

में वायर्ड मैं एकाधिक भाषाओं के लिए एक WinForms अनुप्रयोग स्थानीय बनाना कोशिश कर रहा हूँ। मैं (बजाय कि उन्हें प्रोग्राम के सेट कोड का एक हिस्सा बनाए रखने के लिए की तुलना में) मेरी प्रपत्र लेबल/बटन पाठ गुणों को सेट करने डिजाइनर में संसाधनों फ़ाइल से पढ़ने के लिए एक रास्ता खोजने की कोशिश कर रहा हूँ।WinForms तार, डिजाइनर

मुझे पता चला है कि मैं फॉर्म सेट कर सकता हूं। लोकलोज़ेबल = सत्य, लेकिन फिर संसाधनों को फॉर्म के साथ फाइल से पढ़ा जाता है, लेकिन मेरे कई को कई रूपों में साझा किया जाता है।

क्या प्रोजेक्ट-स्तरीय resx फ़ाइल में संग्रहीत मूल्य के लिए डिज़ाइनर में लेबल का टेक्स्ट सेट करने का कोई तरीका है?

+0

डिजाइनर में ऐसा करने के पीछे की जरूरत क्या है? कम से कम कोड में ऐसा करने का प्रयास। – Walter

+0

आप इस के साथ किसी भी नसीब था? मुझे भी इसकी ज़रूरत है। मैं अपने सभी रूपों को एक संसाधन फ़ाइल से बांधना चाहता हूं। –

+0

दुख की बात नहीं है। मैं कोड में बहुत सारी चीजें तारों में काम कर रहा हूं :( –

उत्तर

4

प्रश्न का उत्तर देने के लिए, नहीं।

लेकिन आईएमओ, यह तब भी नहीं किया जाना चाहिए जब टेक्स्ट स्थिर हो।

स्थानीयकरण और संसाधनों पर अपने जवाब में पढ़ने है:
Resource string location
Globalize an existing Windows Forms application
Using .resx files for global application messages

0

एकमात्र तरीका जिसे मैं सोच सकता हूं वह कस्टम नियंत्रण बनाना होगा जो संसाधन नाम के लिए एक संपत्ति जोड़ देगा। जब संपत्ति सेट की जाती है, तो प्रोजेक्ट संसाधन फ़ाइल से मूल्य प्राप्त करें और टेक्स्ट प्रॉपर्टी को इसके साथ सेट करें। आप यह सुनिश्चित करें कि पाठ धारावाहिक नहीं मिलता है बनाना चाहते जाएगा या यह ResourceName द्वारा निर्धारित मूल्य के ऊपर लिख सकता है।

public class ResourceLabel 
    : Label 
{ 
    private string mResourceName; 
    public string ResourceName 
    { 
     get { return mResourceName; } 
     set 
     { 
      mResourceName = value; 
      if (!string.IsNullOrEmpty(mResourceName)) 
       base.Text = Properties.Resources.ResourceManager.GetString(mResourceName); 
     } 
    } 

    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] 
    public override string Text 
    { 
     get { return base.Text; } 
     set 
     { 
      // Set is done by resource name. 
     } 
    } 
} 
+0

मैंने कुछ इसी तरह के बारे में सोचा, लेकिन यह प्रति फ़ाइल एक resx रखने या कोड में सेट करने से अधिक बुरा लगता है। मुझे निराश है कि कोई अंतर्निहित नहीं है यह करने के लिए जिस तरह से, यह क्या, लोकीकरणीय गुण के साथ मौजूद है केवल कि यह एक resx फ़ाइल संपत्ति भी जरूरत से ही एक छोटी सी ट्वीक लगता है! :( –

3

मुझे लगता है मैं यह करने के लिए एक रास्ता मिल गया लगता है!

आपके संसाधनों में पहले .resx ने सार्वजनिक रूप से एक्सेस संशोधक सेट किया है।

कि डिजाइनर में करने के बाद उत्पन्न कोड (Form.Designer.cs) आप उचित नियंत्रण को यह लिख सकते हैं:

this.<control>.Text = Properties.Resources.<stringname> 
उदाहरण के लिए

:

this.footerLabel.Text = Properties.Resources.footerString; 

ps.:I डॉन ' टी यह समाधान नहीं है कि यह समाधान कितना नैतिक है, लेकिन यह काम करता है!

+3

यह वास्तव में क्या मैं :(बल्कि एक बनाए रखने के लिए की तुलना में से बचने के लिए "कोशिश कर रहा था है कोड का हिस्सा जो उन्हें प्रोग्रामेटिक रूप से सेट करता है " –