tgoop.com/CsharpWindowsForm/183
Last Update:
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace CircularButtons
{
class CButton : Button
{
// انشاء اعضاء اداة التحكم وتهيئتها بقيم ابتدائيه
private Color borderColor = Color.Red; // لون الحدود
private Color onHoverBorderColor = Color.Red;// لون الحدود عندما يكون الماوس فوق الزر
private Color buttonColor = Color.Red;// لون الزر
private Color onHoverButtonColor = Color.Red;// لون الزر عندما يكون المؤشر بينه
private Color textColor = Color.White; // لون النص الذي يعرض على الزر
private Color onHoverTextColor = Color.White;// لون النص عندما يكون المؤشر بداخل الزر
private bool isHovering; /*
متغير منطقي يقوم بفحص حالة الماوس
MouseLeave و MouseEnter من خلال الاحداث
كما في الاكواد التاليه بداخل دالة البناء
*/
private int borderThickness = 0; // سمك الحدود
private int borderThicknessByTwo = 0;
public CButton() // دالة البناء
{
// DoubleBuffered = true;
MouseEnter += (sender, e) =>
{
isHovering = true;
/*
// لاحظ هذه الطريقة المختصرة التي من خلاله قمنا بمعالجة حدث دخول الماوس
بدون ما نعمل دالة حدث وبدون اي جهد
ملاحظة هذه الطريقة في معالجة الاحداث تتم داخل دوال البناء
عندما يكون المؤشر داخل مساحة الزر True تكون قيمة المتغير المنطقي تساوي
*/
};
MouseLeave += (sender, e) =>
{
isHovering = false;
// نفس العملية الاولة بس للحدث مغادرة الماوس
};
// المظهر
FlatStyle = FlatStyle.Flat;
FlatAppearance.BorderSize = 0;
// ButtonBase الخصائص التي في الاعلى مشتقات من الكلاس الاساسي
//
// تهيئة قيمة الخط الافتراضية للزر
Font = new Font("Tahoma", 12, FontStyle.Bold);
Size = new Size(138, 54);
/*
ستكون قيم هذا الزر الخط والمظهر و الحجم
قيم افتراضية عندما تكون تسحب الزر للفورم بتكون هذه قيمه الافتراضية
بالاضافة الى المتغيرات التي في الاعلى
*/
}
// الان وصلنا الى الدالة التي ستغير من شكل الزر
// وهي دالة ناسخة او تسمى تجاوز
// تنسخ الدالة الوهمية الاساسية الموجود في كلاس كونترول
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
/*
عند تجاوز الدالة في فئة مشتقة
OnPaint (PaintEventArgs) تأكد من استدعاء الدالة
للفئة الأساسية بحيث يتلقى المندوبين المسجلون الحدث
base.OnPaint(e); مثل هذا السطر
*/
Graphics g = e.Graphics;
#region شرح للسطر الذي في الاعلى
/*
تم إنشاء اوبجكت من كلاس الرسم
جعلنا هذا الاوبجكت يساوي خاصية الرسم لوبجكت الحدث
سوف يحدث على كائن هذا الحدث g بمعنى ان اي تغيير في الاوبجكت
*/
#endregion
//
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
#region شرح السطر السابق
/*
SmoothingMode تقوم الخاصية
بتعيين جودة العرض للرسومات
g لاحظ ان السطر السابق تستطيع ان تكتبه بدون الاوبجكت
e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
*/
#endregion
////
Brush brush = new SolidBrush(isHovering ? onHoverBorderColor : borderColor);
#region شرح السطر السابق
/*
Brush الكلاس
كلاس الفرشاة
يحدد الكائنات المستخدمة لملء التصميمات الداخلية للاشكال الرسومية
BY برمجة تطبيقات الويندوز C# Programming
Share with your friend now:
tgoop.com/CsharpWindowsForm/183