ویرایش فونت ها (مثال)

در این درس می‌خواهیم در قالب یک برنامه روش دستکاری خاصیت فونت کنترل‌ها را با استفاده از کنترل‌های دیگر، به شما آموزش دهیم. یک برنامه ویندوزی با نام FontDemo ایجاد کنید. نمای کلی برنامه را به صورت زیر در آورید
:

font-1003

برچسب نوع نام خاصیت مقدار
1 TextBox fontTextBox Text Sample Text
TextAlignment Center
2 CheckBox boldCheckBox Text Bold
3 CheckBox italicCheckBox Text Italic
4 CheckBox underlineCheckBox Text Underline
5 CheckBox strikeoutCheckBox Text Strikeout
6 TrackBar sizeTrackBar Minimum 10
Maximum 40
7 Button colorButton Text Pick Color
8 ComboBox familyComboBox Text Choose Family

کاربر با استفاده از چک باکس‌ها (2 تا 5) می‌تواند قالب‌های مختلفی را انتخاب کند. وقتی که یکی از این چک باکس‌ها تیک می‌خورد قالب مرتبط با آن به متن موجود در جعبه متن اعمال و وقتی تیک برداشته شود قالب اعمال شده حذف می‌شود. در برنامه از یک کنترل کمبوباکس هم استفاده شده که فونت‌های موجود در سیستم را در داخل آن می‌ریزیم. با استفاده از این کنترل کاربر می‌تواند فونت مورد نظر خود را به متن اعمال کند. وقتی که بر روی دکمه (7) کلیک شود، کادر محاوره‌ای رنگ (ColorDialog) ظاهر شده و به کاربر اجازه می‌دهد که رنگ متن را تغییر دهد. با استفاده از بند انگشتی کنترل trackbar (6) اندازه فونت را می‌توان تغییر داد.

استفاده از عملگر بیتی XOR برای اضافه و حذف نمودن قالب‌ها

حال اجازه دهید به قسمت کدنویسی برنامه برویم. با چک باکس‌ها که مسئول قالب دهی به فونت‌ها هستند شروع می‌کنیم. بر روی هر کدام از آنها دو بار کلیک کرده تا رویداد CheckedChange مربوط به هر یک ایجاد شود و سپس کدهای زیر را به آنها اضافه می‌کنیم :

private void boldCheckBox_CheckedChanged(object sender, EventArgs e)
{
    fontTextBox.Font = new Font(fontTextBox.Font, fontTextBox.Font.Style ^ FontStyle.Bold);
}

private void italicCheckBox_CheckedChanged(object sender, EventArgs e)
{
    fontTextBox.Font = new Font(fontTextBox.Font, fontTextBox.Font.Style ^ FontStyle.Italic);
}

private void underlineCheckBox_CheckedChanged(object sender, EventArgs e)
{
    fontTextBox.Font = new Font(fontTextBox.Font, fontTextBox.Font.Style ^ FontStyle.Underline);
}

private void strikeThroughCheckBox_CheckedChanged(object sender, EventArgs e)
{
    fontTextBox.Font = new Font(fontTextBox.Font, fontTextBox.Font.Style ^ FontStyle.Strikeout);
}

برای هر کنترل کننده رویداد با استفاده از سازنده‌ای که یک فونت و یک قالب جدید قبول می‌کند یک فونت جدید ایجاد کرده‌ایم. در اولین آرگومان هر سازنده فونت را به fontTextBox برای نگهداری تنظیماتی از قبیل اندازه و خانواده فونت ارسال می‌کنیم. در دومین آرگومان هر سازنده از عملگر بیتی XOR در بین دو قالب (قالب فعلی و قالب تغییر یافته) استفاده می‌کنیم. این عملگر مکانیزمی دوگانه دارد. فراخوانی این عملگر باعث می‌شود که اگر تغییری بر روی قالب اعمال نشده باشد آن را اعمال کند و اگر اعمال شده باشد آن را حذف کند.

تغییر اندازه فونت

با استفاده از کنترل TrackBar به کاربر اجازه داده می‌شود که اندازه فونت fontTextBox را تغییر دهد. این کنترل دارای خواص Minimum و Maximum می‌باشد که با اعداد 10 و 40 مقداردهی شده‌اند و در نتیجه کاربر فقط قادر خواهد بود اندازه‌ای بین 10 تا 40 را برای فونت انتخاب کند. بر روی کنترل مذکور دوبار کلیک کرده تا کنترل کننده رویداد برای رویداد Scroll آن ایجاد شود. کدهای زیر را در داخل کنترل کننده رویداد بنویسید :

private void sizeTrackBar_Scroll(object sender, EventArgs e)
{
    fontTextBox.Font = new Font(fontTextBox.Font.FontFamily, sizeTrackBar.Value, 
        fontTextBox.Font.Style, fontTextBox.Font.Unit);
}

از سازنده کلاس فونت که چهار آرگومان قبول می‌کند، استفاده کرده‌ایم. به سادگی خانواده فونت، قالب و واحد فونت مورد نظرمان را از طریق fontTextBox به سازنده ارسال می‌کنیم. همانطور که در کد بالا مشاهده می‌کنید دومین آرگومان تعیین کننده اندازه فونت است که از طریق مقدار خاصیت Value مربوط به کنترل TrackBar مشخص می‌شود.

بارگذاری فونت‌های نصب شده در سیستم

از کنترل combo box برای انتحاب یکی از فونت‌های موجود در سیستم استفاده می‌شود. هم می‌توان از یک نوع شمارشی لیستی از فونت‌ها را برای این کنترل مشخص کرد و هم می‌توان از فونت‌های موجود در سیستم استفاده نمود. که ما دومی را انتخاب می‌کنیم و لیست فونتهای موجود در سیستم را هنگام بار گذاری فرم در درون کمبوباکس می‌ریزیم. بر روی قسمتی خالی از فرم دوبار کلیک کنید تا کنترل کننده رویداد Load ان ایجاد شود:

private void Form1_Load(object sender, EventArgs e)
{
    InstalledFontCollection fonts = new InstalledFontCollection();

    foreach (FontFamily font in fonts.Families)
    {
        familyComboBox.Items.Add(font.Name);
    }
}

کلاس InstalledFontCollection به شما اجازه دسترسی به فونت‌های موجود در سیستم را می‌دهد. به این نکته توجه کنید که این کلاس در فضای نامی System.Drawing.Text قرار دارد و شما این فضای نامی را باید به برنامه‌تان اضافه کنید. با استفاده از یک حلقه هم فونت‌ها را به خاصیت Families کلاس InstalledFontCollection اضافه می‌کنیم.

خاصیت Famillies شامل مجموعه‌ای از اشیاء FontFamily است که نشان دهنده فونت‌های نصب شده در سیستم می‌باشند. به محیط طراحی بر می‌گردیم و بر روی کمبوباکس دو بار کلیک می‌کنیم تا کنترل کننده رویداد SelectedIndexChange تولید شود. سپس کدهای زیر را در داخل آن می‌نویسیم :

private void familyComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
    fontTextBox.Font = new Font(familyComboBox.SelectedItem.ToString(), 
        fontTextBox.Font.Size, fontTextBox.Font.Style, fontTextBox.Font.Unit);
}

با استفاده از سازنده کلاس Font یک شیء جدید Font ایجاد می‌کنیم که چهار آرگومان قبول می‌کند. مهم‌ترین آرگومان، همان آرگومان اول است، که خانواده فونت را مشخص می‌کند.

از خاصیت SelectedItem مربوط به familyComboBox برای انتخاب آیتمی که در familyComboBox انتخاب کرده‌ایم استفاده و سپس آن را با استفاده از متد ToString() به متن تبدیل می‌کنیم. اندازه جاری، قالب و واحد فونت را نیز با استفاده از fontTextBox به سازنده ارسال می‌کنیم.

تغییر رنگ فونت با استفاده از خاصیت ForeColor

رنگ فونت به وسیله خود فونت تعیین نمی‌شود بلکه باید از یک خاصیت کنترل‌ها به نام ForeColor برای تغییر رنگ متن آنها استفاده کرد. بر روی دکمه colorButton دو بار کلیک کرده و کد زیر را در کنترل کننده رویداد آن بنویسید:

private void colorButton_Click(object sender, EventArgs e)
{
    ColorDialog colorDialog = new ColorDialog();

    if (colorDialog.ShowDialog() == DialogResult.OK)
        fontTextBox.ForeColor = colorDialog.Color;
}

وقتی که بر روی دکمه کلیک می‌شود یک کادر محاوره‌ای ColorDialog ظاهر می‌شود که کاربر با استفاده از متد ShowDialog() می‌تواند یک رنگ را انتخاب نماید. سپس تست می‌کنیم که آیا مقدار برگشتی از متد ()DialogResult.Ok ،ShowDialog است یا خیر؟ مقدار برگشتی DialogResult.OK بدین معناست که کاربر برر روی OK کلیک کرده است. سپس رنگ انتخاب شده توسط کاربر را به خاصیت ForeColor اعمال می‌کنیم، در نتیجه رنگ فونت به رنگ انتخاب شده تغییر می‌یابد.