2010-02-05 14 views
16

मेरे पास एक ऐसा एप्लिकेशन है जहां मेरा उपयोगकर्ता विभिन्न लेबल आदि के लिए फ़ॉन्ट और फ़ॉन्ट रंग बदलता है और वे इसे फ़ाइल में सहेजते हैं लेकिन मुझे निर्दिष्ट लेबल के फ़ॉन्ट को स्ट्रिंग में कनवर्ट करने में सक्षम होना चाहिए फ़ाइल में लिखा जाना है, और फिर जब वे उस फ़ाइल को खोलते हैं तो मेरा प्रोग्राम उस स्ट्रिंग को एक फ़ॉन्ट ऑब्जेक्ट में परिवर्तित कर देगा। यह कैसे किया जा सकता है? मुझे कहीं भी नहीं मिला है जो दिखाता है कि यह कैसे किया जा सकता है।फ़ॉन्ट को स्ट्रिंग में परिवर्तित करें और फिर से वापस

धन्यवाद

bael

+0

जैसा कि आप अपनी फ़ाइल में .ttf फ़ाइल को स्टोर करना चाहते हैं? –

+0

ttf? मेरा मतलब है कि मुझे सिर्फ एक फ़ाइल में फ़ॉन्ट जानकारी (उदाहरण: एरियल, 12.0, नियमित, ग्रीन) को परिवर्तित करने की आवश्यकता है। और फिर जब मैं उस फ़ाइल को स्ट्रिंग में लोड करता हूं तो उसे फ़ॉन्ट ऑब्जेक्ट में परिवर्तित करें –

उत्तर

28

फ़ॉन्ट से स्ट्रिंग और सिस्टम के साथ वापस जाने के लिए आसान है। ड्रॉइंग.फॉन्ट कनवर्टर क्लास। उदाहरण के लिए:

 var cvt = new FontConverter(); 
     string s = cvt.ConvertToString(this.Font); 
     Font f = cvt.ConvertFromString(s) as Font; 
+0

धन्यवाद nobugz :) –

+0

[एमएसडीएन] के अनुसार (http://msdn.microsoft.com/en-us/library/system.drawing.fontconverter.aspx) यह कहता है _ टाइप करने के लिए TypeDescriptor क्लास के माध्यम से FontConverter क्लास को एक्सेस करें GetConverter method_। क्या इससे कोई फर्क पड़ता है? – Ben

+1

ऐसा नहीं है कि मैं सोच सकता हूं, फ़ॉन्ट वर्ग पर [TypeConverter] विशेषता को पढ़ने के लिए यह बिल्कुल लंबा रास्ता है और सटीक कनवर्टर प्राप्त करें। वह विशेषता कभी नहीं बदली जा रही है, कभी भी +/- 1% –

0

सबसे पहले, आप निम्न आलेख प्रणाली फोंट की गणना करने में उपयोग कर सकते हैं।

public void FillFontComboBox(ComboBox comboBoxFonts) 
{ 
    // Enumerate the current set of system fonts, 
    // and fill the combo box with the names of the fonts. 
    foreach (FontFamily fontFamily in Fonts.SystemFontFamilies) 
    { 
     // FontFamily.Source contains the font family name. 
     comboBoxFonts.Items.Add(fontFamily.Source); 
    } 

    comboBoxFonts.SelectedIndex = 0; 
} 

एक फ़ॉन्ट बनाने के लिए:

Font font = new Font(STRING, 6F, FontStyle.Bold); 

सेटअप फ़ॉन्ट शैली आदि के लिए इसका उपयोग ....

Label label = new Label(); 
. . . 
label.Font = new Font(label.Font, FontStyle.Bold); 
4

आप एक फ़ाइल के लिए फ़ॉन्ट वर्ग serialize कर सकते हैं।

ऐसा करने के विवरण के लिए this MSDN article देखें।

को क्रमानुसार करने के लिए:

private void SerializeFont(Font fn, string FileName) 
{ 
    using(Stream TestFileStream = File.Create(FileName)) 
    { 
    BinaryFormatter serializer = new BinaryFormatter(); 
    serializer.Serialize(TestFileStream, fn); 
    TestFileStream.Close(); 
    } 
} 

और deserialize करने के लिए:

private Font DeSerializeFont(string FileName) 
{ 
    if (File.Exists(FileName)) 
    { 
     using(Stream TestFileStream = File.OpenRead(FileName)) 
     { 
      BinaryFormatter deserializer = new BinaryFormatter(); 
      Font fn = (Font)deserializer.Deserialize(TestFileStream); 
      TestFileStream.Close(); 
     } 
     return fn; 
    } 
    return null; 
} 
+1

+1 यह संभवतः संपूर्ण ऑब्जेक्ट को क्रमबद्ध करने का सबसे शानदार समाधान है। –

+0

ध्यान दें कि आपको बाइनरीफॉर्मेटर का उपयोग करने और सीधे फ़ाइल में क्रमबद्ध करने की आवश्यकता नहीं है, तो आप किसी भी IFormatter और किसी भी स्ट्रीम का उपयोग कर सकते हैं। –

0

उपयोग इस कोड नाम और रंग जानकारी के आधार पर एक फ़ॉन्ट बनाने के लिए:

Font myFont = new System.Drawing.Font(<yourfontname>, 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 
Color myColor = System.Drawing.Color.FromArgb(<yourcolor>); 
1
काफी सरल

वास्तव में यदि आप इसे फ़ाइल में पठनीय बनाना चाहते हैं:

class Program 
{ 
    static void Main(string[] args) 
    { 
     Label someLabel = new Label(); 
     someLabel.Font = new Font("Arial", 12, FontStyle.Bold | FontStyle.Strikeout | FontStyle.Italic); 

     var fontString = FontToString(someLabel.Font); 
     Console.WriteLine(fontString); 
     File.WriteAllText(@"D:\test.txt", fontString); 

     var loadedFontString = File.ReadAllText(@"D:\test.txt"); 

     var font = StringToFont(loadedFontString); 
     Console.WriteLine(font.ToString()); 

     Console.ReadKey(); 
    } 

    public static string FontToString(Font font) 
    { 
     return font.FontFamily.Name + ":" + font.Size + ":" + (int)font.Style; 
    } 

    public static Font StringToFont(string font) 
    { 
     string[] parts = font.Split(':'); 
     if (parts.Length != 3) 
      throw new ArgumentException("Not a valid font string", "font"); 

     Font loadedFont = new Font(parts[0], float.Parse(parts[1]), (FontStyle)int.Parse(parts[2])); 
     return loadedFont; 
    } 
} 

अन्यथा serialization जाने का तरीका है।

+0

मैं अपने स्वयं के धारावाहिक रोलिंग को परेशान नहीं करूंगा क्योंकि फ़ॉन्ट क्लास [serializable] पहले से ही है। –

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