استفاده از فونت فارسی در سی شارپ

گاهی اوقات ما در برنامه نویسی برای این که برنامه ما دارای ظاهر زیباتری باشد و کاربر پسند تر باشد از فونت‌هایی استفاده می‌کنیم که خاص هستند. طبیعتاً ممکن است که این فونت‌ها روی همه سیستم‌های مقصد نصب نشده باشند و یا اگر هم نصب شده‌اند از لحاظ ورژن سازگاری نداشته باشند. این امر باعث می‌شود که برنامه ما در کامپیوتر مقصد با آن ظاهر که می‌خواستیم نمایش داده نشود و موجب نارضایتی کاربران شود. در این مطلب قصد داریم که آموزش دهیم در زبان سی شارپ حتی اگر فونتی روی یک سیستم نصب نباشد چگونه از فونت مورد نظر استفاده کنیم بدون این که فونت را نصب کنیم.

ابتدا در ویژوال استودیو یک پروژه جدید از نوع Windows Form App می‌سازیم:
use-persian-custom-font-in-csharp-1.jpg

use-persian-custom-font-in-csharp-2.jpg

پس از این کار صفحه اصلی برنامه به شما نشان داده می‌شود تا بتوانید آن را طراحی کنید. ما برای تست برنامه کنترل‌های Textbox, Label, Button را روی فرم قرار می‌دهیم. برای این کار از پنجره Toolbox که معمولاً در سمت چپ محیط ویژوال استودیو قرار دارد کنترل‌های گفته شده را در درون فرم برنامه بکشید. و از پنجره properties که معمولاً در سمت راست ویژوال استودیو قرار دارد مقادیر text هر کدام از این کنترل‌ها را به شکل زیر قرار می‌دهیم. فرم برنامه به شکل زیر خواهد بود:
use-persian-custom-font-in-csharp-3.jpg

حال باید فایل فونت مورد نظر را پیدا کنیم. بعد از این که فایل فونت مورد نظر که معمولاً پسوند ttf دارند را پیدا کردیم از قسمت زیر بر روی Resources.resx کلیک کنیم تا پنجره مربوط به این فایل باز شود:
use-persian-custom-font-in-csharp-4.jpg

پس از این که این صفحه باز شد از قسمت بالای پنجره بر روی فلش Add Resource کلیک کنید و از منوی که زیر آن باز می‌شود بر روی Add Existing file کلیک کنید. در این صورت پنجره‌ای باز می‌شود که با استفاده از این پنجره فایل فونت خود را با آن انتخاب کنید و بر روی دکمه Open کلیک کنید. من در این مثال فایل IRANSANS (Fanum) را که قبلاً فایل آن را داشتم انتخاب کردم:
use-persian-custom-font-in-csharp-5.jpg
use-persian-custom-font-in-csharp-6.jpg
سپس فایل Resources.resx را ذخیره کرده و ببندید. حال بر روی فرم اصلی برنامه کلیک کنید و دکمه f7 را بزنید تا وارد قسمت کد نویسی این فرم شوید. در قسمت فضای نام، کدهای زیر:

using System;
using System.Drawing;
using System.Drawing.Text;
using System.Runtime.InteropServices;
using System.Windows.Forms;

و سپس در داخل متد سازنده، کدهای زیر را بنویسید.

public Form1()
{
    InitializeComponent();

    var privatefontcollection = new PrivateFontCollection();
    var fontLength = Properties.Resources.IRANSans_FaNum_.Length;
    var fontData = Properties.Resources.IRANSans_FaNum_;
    var data = Marshal.AllocCoTaskMem(fontLength);
    Marshal.Copy(fontData, 0, data, fontLength);
    privatefontcollection.AddMemoryFont(data, fontLength);
    Marshal.FreeCoTaskMem(data);
    textBox1.Font = new Font(privatefontcollection.Families[0], textBox1.Font.Size);
    label1.Font = new Font(privatefontcollection.Families[0], label1.Font.Size);
    button1.Font = new Font(privatefontcollection.Families[0], button1.Font.Size);
}

دقت داشته باشید که در این کد textbox1 نام کنترل textbox ی است که بر روی فرم اصلی قرار داده شده است و همچنین label1, button1 هم به ترتیب نام کنترل‌های موجود در فرم اصلی می‌باشد. همچنین IRANSANS (Fanum) نام فونتی است که ما در مراحل قبل به پروژه اضافه کردیم که می‌توانید نام آن را با توجه به فونتی که به برنامه اضافه کرده‌اید تغییر دهید. حال اگر برنامه را اجرا کنیم تغییر را به صورت تصویر زیر مشاهده خواهیم کرد:
use-persian-custom-font-in-csharp-7.jpg