web-dev-qa-db-ja.com

フォントを文字列に変換してから元に戻す

ユーザーがさまざまなラベルなどのフォントとフォントの色を変更してファイルに保存するアプリケーションがありますが、指定したラベルのフォントをファイルに書き込む文字列に変換できる必要があります。そのファイルを開くと、私のプログラムはその文字列をフォントオブジェクトに変換し直します。これはどのように行うことができますか?それがどのように行われるかを示す場所はどこにも見つかりませんでした。

ありがとうございました

バエル

17
jay_t55

System.Drawing.FontConverterクラスを使用すると、フォント間を簡単に行き来できます。例えば:

        var cvt = new FontConverter();
        string s = cvt.ConvertToString(this.Font);
        Font f = cvt.ConvertFromString(s) as Font;
32
Hans Passant

serialize フォントクラスをファイルに変換できます。

その方法の詳細については、 このMSDNの記事 を参照してください。

シリアル化するには:

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

そして逆シリアル化するには:

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;
}
4
Oded

ファイルで読み取り可能にしたい場合は、非常に簡単です。

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;
    }
}

それ以外の場合は、シリアル化が進むべき道です。

2
Codesleuth

このコードを使用して、名前と色の情報に基づいてフォントを作成します。

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>);
0
Gerrie Schenck

まず、次の記事を使用してシステムフォントを列挙できます。

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 );
0
effkay