آموزش سی شارپ C# قسمت چهاردهم

1395/1/12 محمد احمدی 6050

عرض سلام و وقت بخیر خدمت شما همراهان عزیز کانال برنامه نویسان و تیم ilikephp.ir !
محمد احمدی هستم با چهاردهمین جلسه آموزش سی شارپ در خدمتتون خواهم بود .
مثل جلسه قبل توی این جلسه هم میخوام آموزش رو کاربردی خدمتتون ارائه بدم . اگر دقت کرده باشید نرم افزار notepad , یک نرم افزار برای ویرایش خیلی خیلی ساده متن هست . به این صورت که اگر شما رنگ , نوع فونت , سایز فونت و چپ چین و راست چین بودن یک خط رو تغییر بدین , این تغییرات توی کل متن اعمال میشه . حالا اگر ما بخوایم برای هر خط یا هر کلمه و یا هر حرف یک سری خصوصیات خاص ( رنگ خاص , فونت خاص , اندازه خاص و ... ) انتخاب کنیم باید چیکار کنیم ؟؟ مسلما از notepad دوری میکنیم و سمت wordpad یا حتی پیشرفته تر از اون یعنی خانواده آفیس میریم . جدای از این چند مورد که گفتم امکانات بسیار زیاد دیگه ای هم هست که توی wordpad و office word وجود داره ولی توی notepad وجود نداره !!

همین الان یک نکته رو میگم : نات پد با تکست باکس خیلی معمولی ساخته شده و متن رو از کاربر میگیره و ..... ولی وردپد و یا آفیس ورد خیلی پیشرفته تر هستند !!
خوشبختانه مایکروسافت این امکان رو به برنامه نویسان ویندوز داده که خیلی راحت از خیلی ابزار های پیشرفته استفاده کنن , مثلا خیلی راحت و توی چند دقیقه میشه همین نرم افزار وردپد رو ( بصورت ابتدایی ) نوشت و با کمی کار کردن بیشتر بر روی ظاهر و باطن نرم افزار براحتی میتونیم یک اپ کاربردی رو بنویسیم !

خب مقدمه کافیه . میریم سراغ پروژه کاربردی خودمون که ساخت یک وردپد ساده هست .

یک پروژه جدید ایجاد کنید , از جعبه ابزار Toolbox یک RichTextBox به فرم اظافه کنید . روی RichTextBox کلیک کنید و از بخش خصوصیات Properties , خصوصیت Dock رو روی Fill تنظیم کنید . ( طبق شکل زیر ) :

آموزش سی شارپ

 عکس 1


خب بعد از اینکار میبینید که RichTextBox به فرم چسبیده و با کوچک و بزرگ کردن فرم ریچ تکست باکس هم کوچک و بزرگ میشه !
حالا از جعبه ابزار Toolbox یک MenuStrip به فرم اظافه کنید , اگر پیداش نکردید کافیه توی قسمت همون Toolbox اون رو جستجو کنید ( بالای جعبه ابزار قسمت جستجو هست !! )
حالا از میتونید براحتی ( طبق شکل زیر ) منوی فرم خودتون رو ویرایش و به دلخواه خودتون طراحی کنید .

آموزش سی شارپ


عکس 2 - ایجاد منو


فعلا با 3 تا منوی اول کار نداریم . الان میخوایم برای منوی فونت کد نویسی کنیم !
اول از همه از جعبه ابزار Toolbox یک FontDialog و ColorDialog به فرم اظافه کنید . حالا روی منوی Font دوبار کلیک کنید تا به صفحه کد نویسی بریم . اول باید با استفاده از متد ShowDialog ( در زیر نوشته شده ) صفحه انتخاب فونت رو به کاربر نمایش بدیم تا کاربر فونت و اندازه مورد نظر خودش رو انتخاب کنه :

fontDialog1.ShowDialog();


الان کاربر صفحه انتخاب فونت رو دید و فونت مورد نظر خودش رو انتخاب کرد . بعد از این باید نام و اندازه و حالت های مختلف ( توپر , زیرخط , کج ) رو بصورت کامل به RichTextBox خودمون انتقال بدیم . برای اینکار کافیه مشخصه Font شیء RichTextBox خودمون رو برابر با مشخصه Font شیء FontDialog خودمون کنیم :

richTextBox1.Font = fontDialog1.Font;


اگر همین الان برنامه رو اجرا کنید و یک متنی رو توی برنامه بنویسید و فقط یک قسمتی از متن رو انتخاب کنید ( مثل وقتی که میخوایم توی آفیس ورد فونت و رنگ بخشی از متن رو ویرایش کنیم ) و از منوی edit روی Font کلیک کنیم و فونت رو عوض کنیم میبینیم نتیجه به این شکل هست که فونت کل متن تغییر میکنه ( مثل نات پد :/ ) .
خب این یک چیز کاملا طبیعی هست اونم به این دلیل که ما فونت کل RichTextBox رو عوض کردیم !!
برای اینکه فقط فونت متن انتخابی عوض بشه باید بجای اینکه مشخصه Font رو تغییر بدیم , مشخصه SelectionFont رو تغییر بدیم :

richTextBox1.SelectionFont = fontDialog1.Font;


حالا دوباره برنامه رو اجرا کنید , یک متنی رو یادداشت کنید و بخشی از اون رو انتخاب کنید و فونت رو تغییر بدید , اگر طبق روال گفته شده جلو رفته باشیم بدون هیچ مشکلی فونت متن انتخاب شده تغییر میکنه !
تا اینجای کار بدرستی و راحتی جلو رفت . حالا یک آزمون کوچیک از برناممون میگیریم , یک مقدار متن توی برنامه بنویسید , یک بخشی رو انتخاب کنید و فونت اون بخش رو عوض کنید , حالا یک بخش دیگه رو انتخاب کنید و بجای زدن دکمه ok در قسمت انتخاب فونت , دکمه Cancel رو فشار بدین !!
بعله در کمال تعجب فونتی که دفعه ی قبل توسط کاربر انتخاب شده بود این دفعه هم برای متن انتخاب شده تنظیم شد . در صورتی که باید با زدن دکمه Cancel هیچ فونت و سایز و ... برای متن تنظیم نمیشد !!

بصورت عادی این یک باگ هست که راه حل و شیوه برطرف کردنش خیلی خیلی ساده ست :

if(fontDialog1.ShowDialog() == DialogResult.OK)
                richTextBox1.SelectionFont = fontDialog1.Font;


دو خط کدی که تا الان نوشتیم رو پاک کنید و بجاش دو خط بالا رو بنویسید . حالا برنامه رو اجرا کنید و تست کنید . توضیح دو خط بالا این هست که ما با استفاده از یک شرط FontDialog رو چک کردیم که حتما کاربر دکمه ok رو زده باشه و بعد فونت رو برای متن تنظیم کردیم . دیگه این باگ وجود نداره و در صورت انصراف کاربر از فونت قبلی هیچ فونتی برای متن قرار داده نمیشه !!
خب تا اینجا قسمت تغییر فونتمون رو بصورت کامل ساختیم . حالا میریم سراغ بخش تغییر رنگ متن انتخابی .
حالا روی منوی Color دوبار کلیک کنید . دقت کنید که عملکرد FontDialog و ColorDialog بسیار شبیه به هم هست و برای انتساب رنگ باید بصورتی شبیه به انتساب فونت عمل کنیم و حتی در صورت انصراف کاربر رنگ قبلی قرار داده میشه و ....

if (colorDialog1.ShowDialog() == DialogResult.OK)
richTextBox1.SelectionColor = colorDialog1.Color;

این کد رو هم باید برای تغییر رنگ بنویسیم . ( به همین راحتی ) .

تا الان ما تونستیم مثل وردپد رنگ و خصوصیات فونت متن انتخاب شده رو تغییر بدیم . ادامه نرم افزار وردپد رو توی جلسه آینده میگم ( مثل راست چین و چپ چین و ... )

کلمات کلیدی