CircularButtons.zip
65.5 KB
مشروع موضوع الازرار الدائرية
تم عمل شرح للاكواد في كلاس CButton
تم عمل شرح للاكواد في كلاس CButton
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 الكلاس
كلاس الفرشاة
يحدد الكائنات المستخدمة لملء التصميمات الداخلية للاشكال الرسومية
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 الكلاس
كلاس الفرشاة
يحدد الكائنات المستخدمة لملء التصميمات الداخلية للاشكال الرسومية
//////////
SolidBrush الكلاس الاخر
يحدد فرشاة بلون واحد. تستخدم الفرش لتعبئة أشكال الرسوم
اما ما بداخل الاقواس فهو عبارة عن شرط
onHoverBorderColor سوف يتم تنفيذ true عندما يساوي isHovering
borderColor غير ذلك سوف ينفذ
قمنا بشرح صيغة هذا الشرط في القناة
*/
#endregion
//Border حدود الزر
g.FillEllipse(brush, 0, 0, Height, Height);
g.FillEllipse(brush, Width - Height, 0, Height, Height);
g.FillRectangle(brush, Height / 2, 0, Width - Height, Height);
/*
دوال تحميل زائد تقوم
تملأ الجزء الداخلي من القطع
*/
brush.Dispose();
brush = new SolidBrush(isHovering ? onHoverButtonColor : buttonColor);
//Inner part. Button itself
g.FillEllipse(brush, borderThicknessByTwo, borderThicknessByTwo, Height - borderThickness,
Height - borderThickness);
g.FillEllipse(brush, (Width - Height) + borderThicknessByTwo, borderThicknessByTwo,
Height - borderThickness, Height - borderThickness);
g.FillRectangle(brush, Height / 2 + borderThicknessByTwo, borderThicknessByTwo,
Width - Height - borderThickness, Height - borderThickness);
brush.Dispose();
brush = new SolidBrush(isHovering ? onHoverTextColor : textColor);
//Button Text
SizeF stringSize = g.MeasureString(Text, Font);
g.DrawString(Text, Font, brush, (Width - stringSize.Width) / 2, (Height - stringSize.Height) / 2);
}
public Color BorderColor
{
get { return borderColor; }
set
{
borderColor = value;
}
}
public Color OnHoverBorderColor // لون حدود الزر عندما يكون المؤشر فوق الزر
{
get { return onHoverBorderColor; }
set
{
onHoverBorderColor = value;
}
}
public Color ButtonColor // خاصية لون الزر
{
get { return buttonColor; }
set
{
buttonColor = value;
}
}
public Color OnHoverButtonColor// لون الزر عندما يكون المؤشر فوقه
{
get { return onHoverButtonColor; }
set
{
onHoverButtonColor = value;
}
}
public Color TextColor // تلوين النص
{
get { return textColor; }
set
{
textColor = value;
}
}
// خاصية تلوين النص عندما يكون المؤشر فوق الزر
public Color OnHoverTextColor
{
get { return onHoverTextColor; }
set
{
onHoverTextColor = value;
}
}
}
}
https://www.tgoop.com/CsharpWindowsForm
SolidBrush الكلاس الاخر
يحدد فرشاة بلون واحد. تستخدم الفرش لتعبئة أشكال الرسوم
اما ما بداخل الاقواس فهو عبارة عن شرط
onHoverBorderColor سوف يتم تنفيذ true عندما يساوي isHovering
borderColor غير ذلك سوف ينفذ
قمنا بشرح صيغة هذا الشرط في القناة
*/
#endregion
//Border حدود الزر
g.FillEllipse(brush, 0, 0, Height, Height);
g.FillEllipse(brush, Width - Height, 0, Height, Height);
g.FillRectangle(brush, Height / 2, 0, Width - Height, Height);
/*
دوال تحميل زائد تقوم
تملأ الجزء الداخلي من القطع
*/
brush.Dispose();
brush = new SolidBrush(isHovering ? onHoverButtonColor : buttonColor);
//Inner part. Button itself
g.FillEllipse(brush, borderThicknessByTwo, borderThicknessByTwo, Height - borderThickness,
Height - borderThickness);
g.FillEllipse(brush, (Width - Height) + borderThicknessByTwo, borderThicknessByTwo,
Height - borderThickness, Height - borderThickness);
g.FillRectangle(brush, Height / 2 + borderThicknessByTwo, borderThicknessByTwo,
Width - Height - borderThickness, Height - borderThickness);
brush.Dispose();
brush = new SolidBrush(isHovering ? onHoverTextColor : textColor);
//Button Text
SizeF stringSize = g.MeasureString(Text, Font);
g.DrawString(Text, Font, brush, (Width - stringSize.Width) / 2, (Height - stringSize.Height) / 2);
}
public Color BorderColor
{
get { return borderColor; }
set
{
borderColor = value;
}
}
public Color OnHoverBorderColor // لون حدود الزر عندما يكون المؤشر فوق الزر
{
get { return onHoverBorderColor; }
set
{
onHoverBorderColor = value;
}
}
public Color ButtonColor // خاصية لون الزر
{
get { return buttonColor; }
set
{
buttonColor = value;
}
}
public Color OnHoverButtonColor// لون الزر عندما يكون المؤشر فوقه
{
get { return onHoverButtonColor; }
set
{
onHoverButtonColor = value;
}
}
public Color TextColor // تلوين النص
{
get { return textColor; }
set
{
textColor = value;
}
}
// خاصية تلوين النص عندما يكون المؤشر فوق الزر
public Color OnHoverTextColor
{
get { return onHoverTextColor; }
set
{
onHoverTextColor = value;
}
}
}
}
https://www.tgoop.com/CsharpWindowsForm
Telegram
برمجة تطبيقات الويندوز C# Programming
قناة تهتم بالمواضيع التالية :
برمجة قواعد البيانات
برمجة الشبكات
أمن المعلومات
بأستخدام لغة سي شارب
البوت الخاص بالقناة .
https://www.tgoop.com/CsharpWindowsFormbot
برمجة قواعد البيانات
برمجة الشبكات
أمن المعلومات
بأستخدام لغة سي شارب
البوت الخاص بالقناة .
https://www.tgoop.com/CsharpWindowsFormbot
الافضل ان تتابع الشرح من ملف المشروع عندما تطبق في الفيجوال استوديو
لان بعض التعليقات تلخبطين شويه
لان بعض التعليقات تلخبطين شويه
برمجة تطبيقات الويندوز C# Programming
CircularButtons.zip
بعض الدوال لم اشرحهن او اضع لهن وصف
انت من ستفهمهن وذلك من خلال التعديل في قيم الخصائص والدوال
بعد ذلك اذهب واضف الاداة الى الفورم وستلاحظ التغييرات التي حدثت على الاداة
ملاااااااااااااااحظة مهمه :
عندما تقوم بالتعديل في كلاس الاداة مثلا تقوم بتغيير لون الزر الى لون غير الاحمر مثلا الازرق
private Color buttonColor = Color.Blue;
l
يجب عليك الضغط على اختصار Ctrl+Shift+B
وذلك لكي يتم اعادة بناء المشروع واضافة التغييرات التي حدث على الاداة
بعد ذالك فم بسحب الاداة من صندوق الادوات
لاتنسى الاختصار بعد كل عملية تعديل على الكود
انت من ستفهمهن وذلك من خلال التعديل في قيم الخصائص والدوال
بعد ذلك اذهب واضف الاداة الى الفورم وستلاحظ التغييرات التي حدثت على الاداة
ملاااااااااااااااحظة مهمه :
عندما تقوم بالتعديل في كلاس الاداة مثلا تقوم بتغيير لون الزر الى لون غير الاحمر مثلا الازرق
private Color buttonColor = Color.Blue;
l
يجب عليك الضغط على اختصار Ctrl+Shift+B
وذلك لكي يتم اعادة بناء المشروع واضافة التغييرات التي حدث على الاداة
بعد ذالك فم بسحب الاداة من صندوق الادوات
لاتنسى الاختصار بعد كل عملية تعديل على الكود
بسم الله الرحمن الرحيم
موضوع اليوم هو عبارة عن كود يقوم بتكبير او تصغير الشاشة عنطريق ايقونة البرنامج في شريط المهام
عندما تعمل على مشروع وتقوم باستخدام التصميم الافتراضي للفورم
سوف تلاحظ عندما تقوم بتنفيذ البرنامج انك تستطيع تصغير او تكبير البرنامج من خلال الضغط على ايقونه البرنامج من شريط المهام
ولاكن ماذا لو انت قمت بتصميم الفورم الخاص بك انت بنفسك وقمت بعمل الخاصية FormBorderStyle تساوي none
في هذه الحالة لن تستطيع تكبير او تصغير الفورم عند الضغط على الايقونة
لحل هذه المشكلة قم بإضافة هذه الدالة في كلاس الفورم
const int WS_MINIMIZEBOX = 0x20000;
const int CS_DBLCLKS = 0x8;
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.Style |= WS_MINIMIZEBOX;
cp.ClassStyle |= CS_DBLCLKS;
return cp;
}
}
موضوع اليوم هو عبارة عن كود يقوم بتكبير او تصغير الشاشة عنطريق ايقونة البرنامج في شريط المهام
عندما تعمل على مشروع وتقوم باستخدام التصميم الافتراضي للفورم
سوف تلاحظ عندما تقوم بتنفيذ البرنامج انك تستطيع تصغير او تكبير البرنامج من خلال الضغط على ايقونه البرنامج من شريط المهام
ولاكن ماذا لو انت قمت بتصميم الفورم الخاص بك انت بنفسك وقمت بعمل الخاصية FormBorderStyle تساوي none
في هذه الحالة لن تستطيع تكبير او تصغير الفورم عند الضغط على الايقونة
لحل هذه المشكلة قم بإضافة هذه الدالة في كلاس الفورم
const int WS_MINIMIZEBOX = 0x20000;
const int CS_DBLCLKS = 0x8;
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.Style |= WS_MINIMIZEBOX;
cp.ClassStyle |= CS_DBLCLKS;
return cp;
}
}
الفرق بين ref و out من الكلمات الرئيسية في C #
الكلمة ref
1- من الضروري تهيئة المعلمات قبل تمريرها إلى الدالة
2- ليس من الضروري تهيئة قيمة المعلمة قبل العودة إلى دالة الاستدعاء
3- يفيد تمرير القيمة من خلال ref عندما تحتاج الدالة المطلوبة أيضًا إلى تغيير قيمة المعلمة التي تم تمريرها.
امثلة :
public void Sum(ref int x)
{
x = 80;
}
private void Form2_Load(object sender, EventArgs e)
{
int x=4;
Sum(ref x);
MessageBox.Show(x.ToString());
}
// OutPut -> 80
لاحظ كيف تم تغيير قيمة المتغير x في الدالة Form2_Load وذلك بسبب تمرير المتغير بالمرجعية
لو نقوم بتمرير المتغير بالقيمة لن يتم تغيير القيمة في الدالة Form2_Load
مثال
public void Sum( int x)
{
x = 80;
}
private void Form2_Load(object sender, EventArgs e)
{
int x=4;
Sum( x);
MessageBox.Show(x.ToString());
}
// OutPut -> 4
لو نقوم بتمرير متغير مرجعي بدون تهيئته بقيمة سوف تحصل على Error
مثال :
public void Sum(ref int x)
{
x = 80;
}
private void Form2_Load(object sender, EventArgs e)
{
int x; // Error
Sum(ref x);
MessageBox.Show(x.ToString());
}
الكلمة out
1- ليس من الضروري تهيئة المعلمات قبل تمريرها إلى الدالة
2- من الضروري تهيئة قيمة المعلمة قبل العودة إلى دالة الاستدعاء
3- نفس كلمة ref في رقم 3
امثلة :
public void Sum(out int x)
{
x = 80;
}
private void Form2_Load(object sender, EventArgs e)
{
int x= 10;
Sum(out x);
MessageBox.Show(x.ToString());
}
// OutPut -> 80
مثال اخر
public void Sum(out int x)
{
x = 80;
}
private void Form2_Load(object sender, EventArgs e)
{
int x; //
Sum(out x);
MessageBox.Show(x.ToString());
}
// OutPut -> 80
اخر مثال
public void Sum(out int x)
{
}
private void Form2_Load(object sender, EventArgs e)
{
int x = 50;
Sum(out x);
MessageBox.Show(x.ToString());
}
//Error
سببب الخطاء من الضروري تهيئة قيمة المعلمة قبل العودة إلى دالة الاستدعاء
انتهى ....................
الكلمة ref
1- من الضروري تهيئة المعلمات قبل تمريرها إلى الدالة
2- ليس من الضروري تهيئة قيمة المعلمة قبل العودة إلى دالة الاستدعاء
3- يفيد تمرير القيمة من خلال ref عندما تحتاج الدالة المطلوبة أيضًا إلى تغيير قيمة المعلمة التي تم تمريرها.
امثلة :
public void Sum(ref int x)
{
x = 80;
}
private void Form2_Load(object sender, EventArgs e)
{
int x=4;
Sum(ref x);
MessageBox.Show(x.ToString());
}
// OutPut -> 80
لاحظ كيف تم تغيير قيمة المتغير x في الدالة Form2_Load وذلك بسبب تمرير المتغير بالمرجعية
لو نقوم بتمرير المتغير بالقيمة لن يتم تغيير القيمة في الدالة Form2_Load
مثال
public void Sum( int x)
{
x = 80;
}
private void Form2_Load(object sender, EventArgs e)
{
int x=4;
Sum( x);
MessageBox.Show(x.ToString());
}
// OutPut -> 4
لو نقوم بتمرير متغير مرجعي بدون تهيئته بقيمة سوف تحصل على Error
مثال :
public void Sum(ref int x)
{
x = 80;
}
private void Form2_Load(object sender, EventArgs e)
{
int x; // Error
Sum(ref x);
MessageBox.Show(x.ToString());
}
الكلمة out
1- ليس من الضروري تهيئة المعلمات قبل تمريرها إلى الدالة
2- من الضروري تهيئة قيمة المعلمة قبل العودة إلى دالة الاستدعاء
3- نفس كلمة ref في رقم 3
امثلة :
public void Sum(out int x)
{
x = 80;
}
private void Form2_Load(object sender, EventArgs e)
{
int x= 10;
Sum(out x);
MessageBox.Show(x.ToString());
}
// OutPut -> 80
مثال اخر
public void Sum(out int x)
{
x = 80;
}
private void Form2_Load(object sender, EventArgs e)
{
int x; //
Sum(out x);
MessageBox.Show(x.ToString());
}
// OutPut -> 80
اخر مثال
public void Sum(out int x)
{
}
private void Form2_Load(object sender, EventArgs e)
{
int x = 50;
Sum(out x);
MessageBox.Show(x.ToString());
}
//Error
سببب الخطاء من الضروري تهيئة قيمة المعلمة قبل العودة إلى دالة الاستدعاء
انتهى ....................
أدوات التحكم
ComboBox
مربع التحرير والسرد
يوفر ComboBox ميزتين مختلفتين في عنصر تحكم واحد ، مما يعني أن ComboBox يعمل مثل TextBox و ListBox. في ComboBox ، يتم عرض عنصر واحد فقط في كل مرة وبقية العناصر موجودة في القائمة المنسدلة.
يمكنك إضافة هذه الأداة الى الفورم بطريقتين الأولى من toolbox
والثانية برمجيا كما سوف نشاهد في المثال التالي :
private void Form1_Load(object sender, EventArgs e)
{
ComboBox myCMBOX = new ComboBox()
{
Location = new Point(75, 42),
Size = new Size(399, 31),
};
this.Controls.Add(myCMBOX);
}
ولإضافة عناصر الى أداة ComboBox بهذه الطريقة
private void Form1_Load(object sender, EventArgs e)
{
ComboBox myCMBOX = new ComboBox()
{
Location = new Point(75, 42),
Size = new Size(399, 31),
};
myCMBOX.Items.Add("C#");
myCMBOX.Items.Add("C++");
myCMBOX.Items.Add("Java");
myCMBOX.Items.Add("Python");
this.Controls.Add(myCMBOX);
}
اذا اردت ان تضيف اكثر من item مرة واحدة وبدون تكرار نفس الاسطر
بهذه الطريقة
private void Form1_Load(object sender, EventArgs e)
{
ComboBox myCMBOX = new ComboBox()
{
Location = new Point(75, 42),
Size = new Size(399, 31),
};
string[] str = { "C#", "C++", "Java", "Python" };
myCMBOX.Items.AddRange(str);
this.Controls.Add(myCMBOX);
}
تقوم بعمل مصفوفة تحتوي على جميع العناصر التي تريد اضافتها بعد ذلك تستخدم الدالة AddRange
والمقصود بأن هذه الأداة تحتوي على ميزتين أي انك تستطيع ان تكتب بداخلها وكأنك تكتب على أداة textbox والميزة الأخرى انها تقوم بعرض قائمة منسدلة
لمنع الكتابة على أداة ComboBox قم بتعديل قيمة الخاصية DropDownStyle تساوي DropDownList
او برمجيا بهذا الشكل :
ComboBox myCMBOX = new ComboBox()
{
Location = new Point(75, 42),
Size = new Size(399, 31),
DropDownStyle = ComboBoxStyle.DropDownList
};
او حتى بهذه الطريقة
ComboBox myCMBOX = new ComboBox();
myCMBOX.Location = new Point(75, 42);
myCMBOX.Size = new Size(399, 31);
myCMBOX.DropDownStyle = ComboBoxStyle.DropDownList;
بالطريقة اذي تعجبك
خصائص هامة في ComboBox
DropDownHeight
تُستخدم هذه الخاصية لتعيين الارتفاع بالبكسل للجزء المنسدل لعنصر التحكم ComboBox.
تتأثر بالخاصية DropDownStyle= Simple
DropDownStyle
تُستخدم هذه الخاصية لتعيين قيمة تحدد نمط عنصر التحكم ComboBox.
القيمة Simple تعني ان الأداة ستعمل مثل textbox ولاكن لايوجد قائمة منسدلة
القيمة DropDown قائمة منسدلة و textbox
القيمة DropDownList قائمة منسدلة فقط
DropDownWidth
يتم استخدام هذه الخاصية لتعيين عرض الجزء المنسدل لعنصر تحكم ComboBox.
تتأثر بالخاصية DropDownStyle= Simple
Height
الارتفاع تُستخدم هذه الخاصية لتعيين ارتفاع عنصر التحكم ComboBox.
Items
يتم استخدام هذه الخاصية للحصول على كائن يمثل مجموعة العناصر الموجودة في عنصر التحكم ComboBox هذا. (إضافة عناصر الى هذه الأداة مثل الاكواد السابقة)
MaxDropDownItems
تُستخدم هذه الخاصية لتعيين الحد الأقصى لعدد العناصر التي سيتم عرضها في الجزء المنسدل لعنصر التحكم ComboBox.
MaxLength
تُستخدم هذه الخاصية لتعيين عدد الأحرف التي يمكن للمستخدم كتابتها في عنصر التحكم ComboBox.
تتأثر هذه الخاصية
DropDownStyle = DropDownList
—————————————-
SelectedItem
يتم استخدام هذه الخاصية لتعيين العنصر المحدد حاليًا في ComboBox.
——————————————————
Sorted
تستخدم هذه الخاصية لترتيب عناصر أداة ComboBox عندما تساوي true
ComboBox
مربع التحرير والسرد
يوفر ComboBox ميزتين مختلفتين في عنصر تحكم واحد ، مما يعني أن ComboBox يعمل مثل TextBox و ListBox. في ComboBox ، يتم عرض عنصر واحد فقط في كل مرة وبقية العناصر موجودة في القائمة المنسدلة.
يمكنك إضافة هذه الأداة الى الفورم بطريقتين الأولى من toolbox
والثانية برمجيا كما سوف نشاهد في المثال التالي :
private void Form1_Load(object sender, EventArgs e)
{
ComboBox myCMBOX = new ComboBox()
{
Location = new Point(75, 42),
Size = new Size(399, 31),
};
this.Controls.Add(myCMBOX);
}
ولإضافة عناصر الى أداة ComboBox بهذه الطريقة
private void Form1_Load(object sender, EventArgs e)
{
ComboBox myCMBOX = new ComboBox()
{
Location = new Point(75, 42),
Size = new Size(399, 31),
};
myCMBOX.Items.Add("C#");
myCMBOX.Items.Add("C++");
myCMBOX.Items.Add("Java");
myCMBOX.Items.Add("Python");
this.Controls.Add(myCMBOX);
}
اذا اردت ان تضيف اكثر من item مرة واحدة وبدون تكرار نفس الاسطر
بهذه الطريقة
private void Form1_Load(object sender, EventArgs e)
{
ComboBox myCMBOX = new ComboBox()
{
Location = new Point(75, 42),
Size = new Size(399, 31),
};
string[] str = { "C#", "C++", "Java", "Python" };
myCMBOX.Items.AddRange(str);
this.Controls.Add(myCMBOX);
}
تقوم بعمل مصفوفة تحتوي على جميع العناصر التي تريد اضافتها بعد ذلك تستخدم الدالة AddRange
والمقصود بأن هذه الأداة تحتوي على ميزتين أي انك تستطيع ان تكتب بداخلها وكأنك تكتب على أداة textbox والميزة الأخرى انها تقوم بعرض قائمة منسدلة
لمنع الكتابة على أداة ComboBox قم بتعديل قيمة الخاصية DropDownStyle تساوي DropDownList
او برمجيا بهذا الشكل :
ComboBox myCMBOX = new ComboBox()
{
Location = new Point(75, 42),
Size = new Size(399, 31),
DropDownStyle = ComboBoxStyle.DropDownList
};
او حتى بهذه الطريقة
ComboBox myCMBOX = new ComboBox();
myCMBOX.Location = new Point(75, 42);
myCMBOX.Size = new Size(399, 31);
myCMBOX.DropDownStyle = ComboBoxStyle.DropDownList;
بالطريقة اذي تعجبك
خصائص هامة في ComboBox
DropDownHeight
تُستخدم هذه الخاصية لتعيين الارتفاع بالبكسل للجزء المنسدل لعنصر التحكم ComboBox.
تتأثر بالخاصية DropDownStyle= Simple
DropDownStyle
تُستخدم هذه الخاصية لتعيين قيمة تحدد نمط عنصر التحكم ComboBox.
القيمة Simple تعني ان الأداة ستعمل مثل textbox ولاكن لايوجد قائمة منسدلة
القيمة DropDown قائمة منسدلة و textbox
القيمة DropDownList قائمة منسدلة فقط
DropDownWidth
يتم استخدام هذه الخاصية لتعيين عرض الجزء المنسدل لعنصر تحكم ComboBox.
تتأثر بالخاصية DropDownStyle= Simple
Height
الارتفاع تُستخدم هذه الخاصية لتعيين ارتفاع عنصر التحكم ComboBox.
Items
يتم استخدام هذه الخاصية للحصول على كائن يمثل مجموعة العناصر الموجودة في عنصر التحكم ComboBox هذا. (إضافة عناصر الى هذه الأداة مثل الاكواد السابقة)
MaxDropDownItems
تُستخدم هذه الخاصية لتعيين الحد الأقصى لعدد العناصر التي سيتم عرضها في الجزء المنسدل لعنصر التحكم ComboBox.
MaxLength
تُستخدم هذه الخاصية لتعيين عدد الأحرف التي يمكن للمستخدم كتابتها في عنصر التحكم ComboBox.
تتأثر هذه الخاصية
DropDownStyle = DropDownList
—————————————-
SelectedItem
يتم استخدام هذه الخاصية لتعيين العنصر المحدد حاليًا في ComboBox.
——————————————————
Sorted
تستخدم هذه الخاصية لترتيب عناصر أداة ComboBox عندما تساوي true
👍2
احداث أداة ComboBox
DropDown
يحدث هذا الحدث عند عرض الجزء المنسدل من ComboBox.
DropDownClosed
يحدث هذا الحدث عندما يصبح الجزء المنسدل من ComboBox غير مرئي.
DropDownStyleChanged
يحدث هذا الحدث عند تغيير خاصية DropDownStyle.
Leave
يحدث هذا الحدث عندما يترك مؤشر الإدخال ComboBox.
SelectedIndexChanged
يحدث هذا الحدث عند تغيير خاصية SelectedIndex.
DropDown
يحدث هذا الحدث عند عرض الجزء المنسدل من ComboBox.
DropDownClosed
يحدث هذا الحدث عندما يصبح الجزء المنسدل من ComboBox غير مرئي.
DropDownStyleChanged
يحدث هذا الحدث عند تغيير خاصية DropDownStyle.
Leave
يحدث هذا الحدث عندما يترك مؤشر الإدخال ComboBox.
SelectedIndexChanged
يحدث هذا الحدث عند تغيير خاصية SelectedIndex.
بسم الله الرحمن الرحيم
تابع أدوات التحكم
أداة MaskedTextBox
توفر اداة التحكم MaskedTextBox إجراء التحقق من صحة إدخال المستخدم في الفورم مثل التاريخ وأرقام الهواتف وما إلى ذلك. أو بعبارة أخرى ، يتم استخدامه لتوفير قناع يميز بين إدخال المستخدم المناسب وغير الصحيح
بمعنى انك بدل ماتستخدم أداة textbox وتعمل شروط منطقية لتقييد المستخدم بعملية ادخال محددة حروف او ارقام استخدم هذه الأداة MaskedTextBox
إضافة الأداة الى الفورم برمجياً
private void Form1_Load(object sender, EventArgs e)
{
MaskedTextBox Mbox = new MaskedTextBox()
{
Size = new Size(319, 32),
Location = new Point(78, 32),
};
this.Controls.Add(Mbox); }
لكي تجعل الأداة تقبل ارقام او (حروف و ارقام) فقط وبخانات محددة استخدم الخاصية Mask
مثال :
MaskedTextBox Mbox = new MaskedTextBox()
{
Size = new Size(319, 32),
Location = new Point(78, 32),
Mask = "000000000",
};
this.Controls.Add(Mbox);
الان عند ما تقوم بالتنفيذ ستلاحظ انهو يوجد خط بداخل الأداة الخط هو عبارة عن قناع بعدد الخانات التي سوف تدخلها في الكود السابق سوف تقبل الأداة 9 خانات من الأرقام
او تعملها لادخال التاريخ
MaskedTextBox Mbox = new MaskedTextBox()
{
Size = new Size(319, 32),
Location = new Point(78, 32),
Mask = "00/00/0000",
};
this.Controls.Add(Mbox);}
اذا اردت ان تقوم بتحديد أي قيمة للخاصية Mask اثناء التصميم
قم بالضغط على مربع السهم الذي يظهر فوق الأداة
او من قائمة الخصائص
ملاحظات حول هذه الأداة
لاتدعم أداة التحكم MaskedTextBox عملية تعدد الاسطر MultiLine
وايضاً لاتدعم عملية التراجع عن الكتابة
مثلا انت قمت بكتابة نص بداخل هذه الأداة وتريد الضغط على اختصار التراجع Ctrl+Z في هذه الأداة لاتدعم عملية التراجع
https://www.tgoop.com/CsharpWindowsForm
تابع أدوات التحكم
أداة MaskedTextBox
توفر اداة التحكم MaskedTextBox إجراء التحقق من صحة إدخال المستخدم في الفورم مثل التاريخ وأرقام الهواتف وما إلى ذلك. أو بعبارة أخرى ، يتم استخدامه لتوفير قناع يميز بين إدخال المستخدم المناسب وغير الصحيح
بمعنى انك بدل ماتستخدم أداة textbox وتعمل شروط منطقية لتقييد المستخدم بعملية ادخال محددة حروف او ارقام استخدم هذه الأداة MaskedTextBox
إضافة الأداة الى الفورم برمجياً
private void Form1_Load(object sender, EventArgs e)
{
MaskedTextBox Mbox = new MaskedTextBox()
{
Size = new Size(319, 32),
Location = new Point(78, 32),
};
this.Controls.Add(Mbox); }
لكي تجعل الأداة تقبل ارقام او (حروف و ارقام) فقط وبخانات محددة استخدم الخاصية Mask
مثال :
MaskedTextBox Mbox = new MaskedTextBox()
{
Size = new Size(319, 32),
Location = new Point(78, 32),
Mask = "000000000",
};
this.Controls.Add(Mbox);
الان عند ما تقوم بالتنفيذ ستلاحظ انهو يوجد خط بداخل الأداة الخط هو عبارة عن قناع بعدد الخانات التي سوف تدخلها في الكود السابق سوف تقبل الأداة 9 خانات من الأرقام
او تعملها لادخال التاريخ
MaskedTextBox Mbox = new MaskedTextBox()
{
Size = new Size(319, 32),
Location = new Point(78, 32),
Mask = "00/00/0000",
};
this.Controls.Add(Mbox);}
اذا اردت ان تقوم بتحديد أي قيمة للخاصية Mask اثناء التصميم
قم بالضغط على مربع السهم الذي يظهر فوق الأداة
او من قائمة الخصائص
ملاحظات حول هذه الأداة
لاتدعم أداة التحكم MaskedTextBox عملية تعدد الاسطر MultiLine
وايضاً لاتدعم عملية التراجع عن الكتابة
مثلا انت قمت بكتابة نص بداخل هذه الأداة وتريد الضغط على اختصار التراجع Ctrl+Z في هذه الأداة لاتدعم عملية التراجع
https://www.tgoop.com/CsharpWindowsForm
Telegram
برمجة تطبيقات الويندوز C# Programming
قناة تهتم بالمواضيع التالية :
برمجة قواعد البيانات
برمجة الشبكات
أمن المعلومات
بأستخدام لغة سي شارب
البوت الخاص بالقناة .
https://www.tgoop.com/CsharpWindowsFormbot
برمجة قواعد البيانات
برمجة الشبكات
أمن المعلومات
بأستخدام لغة سي شارب
البوت الخاص بالقناة .
https://www.tgoop.com/CsharpWindowsFormbot
بسم الله الرحمن الرحيم
اليوم سوف نشرح عن كيفية عمل تنفيذ لمهام متعددة في نفس الوقت multi Task
نبدأ الشرح بكود
مثال
لو كان معك دالتين في كلاس Form1
كود الدالتين :
public void h1()
{
for (int i = 0; i < 3; i++)
{
MessageBox.Show("h1");
}
}
public void h2()
{
for (int i = 0; i < 3; i++)
{
MessageBox.Show("h2");
}
}
الان عند استدعاء الدالتين سوف يقوم الكمبايلر بمعالجة الدالة الأولى ومن ثم يقوم بمعالجة الدالة الثانية
private void button1_Click(object sender, EventArgs e)
{
h1();
h2();
}
سوف يقوم بتكرار messageBox ثلاث مرات على التوالي للدالة الأولى بعد ذلك يقوم بنفس العملية للدالة الثانية
الان سوف نجعل الكمبايلر يعالج اكثر من عملية في وقت واحد
يعني يقوم بتنفيذ الدالتين في وقت واحد
سوف نستخدم الكلاس Thread وهو موجود في الفضاء
using System.Threading;
private void button1_Click(object sender, EventArgs e)
{
Thread t1 = new Thread(h1);
Thread t2 = new Thread(h2);
t1.Start();
t2.Start();
}
نقوم بانشاء 2 اوبجكت من الكلاس Thread ونرسل العملية التي نريد بدء عمليه معالجتها الى دالة البناء
بعد ذالك نستدعي الدالة Start لبدء العملية
الان عندما تقوم بالتنفيذ وتقوم بالضغط على الزر سوف يطبع رسالتين من الدالة الأولى ومن الدالة الثاني
وهكذا بعد ان تضغط على موافق في messageBox يتم اظهار الرساله التي بعد
بعدد دورات الدوارة
اذا انت تريد ان تمم العملية بعد مدة محددة
استخدم الدالة sleep
مثال
public void h1()
{
for (int i = 0; i < 3; i++)
{
MessageBox.Show("h1");
Thread.Sleep(3000);
}
}
الان عند التنفيذ والضغط سوف يتم اظهار الرسالة الأولى "h1" وبعد 3 ثواني سوف تظهر الرسالة الثانية وهكذا
انتهى ......................
https://www.tgoop.com/CsharpWindowsForm
اليوم سوف نشرح عن كيفية عمل تنفيذ لمهام متعددة في نفس الوقت multi Task
نبدأ الشرح بكود
مثال
لو كان معك دالتين في كلاس Form1
كود الدالتين :
public void h1()
{
for (int i = 0; i < 3; i++)
{
MessageBox.Show("h1");
}
}
public void h2()
{
for (int i = 0; i < 3; i++)
{
MessageBox.Show("h2");
}
}
الان عند استدعاء الدالتين سوف يقوم الكمبايلر بمعالجة الدالة الأولى ومن ثم يقوم بمعالجة الدالة الثانية
private void button1_Click(object sender, EventArgs e)
{
h1();
h2();
}
سوف يقوم بتكرار messageBox ثلاث مرات على التوالي للدالة الأولى بعد ذلك يقوم بنفس العملية للدالة الثانية
الان سوف نجعل الكمبايلر يعالج اكثر من عملية في وقت واحد
يعني يقوم بتنفيذ الدالتين في وقت واحد
سوف نستخدم الكلاس Thread وهو موجود في الفضاء
using System.Threading;
private void button1_Click(object sender, EventArgs e)
{
Thread t1 = new Thread(h1);
Thread t2 = new Thread(h2);
t1.Start();
t2.Start();
}
نقوم بانشاء 2 اوبجكت من الكلاس Thread ونرسل العملية التي نريد بدء عمليه معالجتها الى دالة البناء
بعد ذالك نستدعي الدالة Start لبدء العملية
الان عندما تقوم بالتنفيذ وتقوم بالضغط على الزر سوف يطبع رسالتين من الدالة الأولى ومن الدالة الثاني
وهكذا بعد ان تضغط على موافق في messageBox يتم اظهار الرساله التي بعد
بعدد دورات الدوارة
اذا انت تريد ان تمم العملية بعد مدة محددة
استخدم الدالة sleep
مثال
public void h1()
{
for (int i = 0; i < 3; i++)
{
MessageBox.Show("h1");
Thread.Sleep(3000);
}
}
الان عند التنفيذ والضغط سوف يتم اظهار الرسالة الأولى "h1" وبعد 3 ثواني سوف تظهر الرسالة الثانية وهكذا
انتهى ......................
https://www.tgoop.com/CsharpWindowsForm
Telegram
برمجة تطبيقات الويندوز C# Programming
قناة تهتم بالمواضيع التالية :
برمجة قواعد البيانات
برمجة الشبكات
أمن المعلومات
بأستخدام لغة سي شارب
البوت الخاص بالقناة .
https://www.tgoop.com/CsharpWindowsFormbot
برمجة قواعد البيانات
برمجة الشبكات
أمن المعلومات
بأستخدام لغة سي شارب
البوت الخاص بالقناة .
https://www.tgoop.com/CsharpWindowsFormbot
السلام عليكم
من المعروف ان الكلاس الذي يحتوي على دالة static نستدعيها عنطريق اسم الكلاس
وليس عنطريق انشاء اوبجكت
ولاكن هناك طريقة تجعلك تستدعي الدوال التي في كلاسات أخرى بدون ذكر اسم اكلاس
وذلك عنطريق تضمين فضاء الاسم والكلاس تسبقهم كلمه static
using static namespace.Class1;
المقصود ب namespace في السطر السابق هو اسم فضاء الاسم الذي يحتوي على الكلاس
لاحظ الكود كامل
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using static MY_Calculator.Class1; // Example
namespace MY_Calculator
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private void Form2_Load(object sender, EventArgs e)
{
method();
}
}
class Class1
{
public static void method()
{
MessageBox.Show("C#");
}
}
}
من المعروف ان الكلاس الذي يحتوي على دالة static نستدعيها عنطريق اسم الكلاس
وليس عنطريق انشاء اوبجكت
ولاكن هناك طريقة تجعلك تستدعي الدوال التي في كلاسات أخرى بدون ذكر اسم اكلاس
وذلك عنطريق تضمين فضاء الاسم والكلاس تسبقهم كلمه static
using static namespace.Class1;
المقصود ب namespace في السطر السابق هو اسم فضاء الاسم الذي يحتوي على الكلاس
لاحظ الكود كامل
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using static MY_Calculator.Class1; // Example
namespace MY_Calculator
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private void Form2_Load(object sender, EventArgs e)
{
method();
}
}
class Class1
{
public static void method()
{
MessageBox.Show("C#");
}
}
}
بسم الله الرحمن الرحيم
موضوع اليوم بسيط جداً وهو عن كيف تقوم ببرمجة واجهه فورم
فكرة برمجة الفورم تعتبر نفس فكرة باقي أدوات التحكم
وهي عنطريق انشاء كلاس يورث من الكلاس Form
او عنطريق انشاء اوبجكت من الكلاس Form
الطريقة الأولى :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Drawing;
namespace MY_Calculator
{
class myform : Form
{
public myform()
{
Size = new Size(600, 400);
BackColor = Color.LightSteelBlue;
this.CenterToScreen();
}}}
بهذه الطريقة بالنسبة للخصائص فهو يورثها من الكلاس Form
لذالك الخصائص التي لم نقم بتعديل قيمها فهو سوف يورثها بقيمها الافتراضية
this.CenterToScreen();
اما الكود في السطر السابق فهو يجعل الفورم الخاص بك يظهر في منتصف الشاشة
الدالة CenterToScreen تقوم بعمل الخاصية StartPosition = FormStartPosition.CenterScreen
الان لكي تشاهد الفورم الخاص بك
قم بإضافة زر واكتب الاسطر التالية
private void button1_Click(object sender, EventArgs e)
{
new myform().Show();
this.Hide();
}
او بهذه الطريقة تنشئ اوبجكت من كلاس الفورم
myform f1 = new myform();
f1.Show();
ولاضافة أداة للفورم الخاص بك قم بتعريف اوبجكت من كلاس Button وتهيئه خصائصه
انشاء اوبجكت
Button btn = new Button()
{
Size = new Size(98, 45),
Text = "my button"
};
لكي تقوم باضافتة الى الفورم اكتب السطر التالي بداخل دالة البناء
this.Controls.Add(btn);
موضوع اليوم بسيط جداً وهو عن كيف تقوم ببرمجة واجهه فورم
فكرة برمجة الفورم تعتبر نفس فكرة باقي أدوات التحكم
وهي عنطريق انشاء كلاس يورث من الكلاس Form
او عنطريق انشاء اوبجكت من الكلاس Form
الطريقة الأولى :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Drawing;
namespace MY_Calculator
{
class myform : Form
{
public myform()
{
Size = new Size(600, 400);
BackColor = Color.LightSteelBlue;
this.CenterToScreen();
}}}
بهذه الطريقة بالنسبة للخصائص فهو يورثها من الكلاس Form
لذالك الخصائص التي لم نقم بتعديل قيمها فهو سوف يورثها بقيمها الافتراضية
this.CenterToScreen();
اما الكود في السطر السابق فهو يجعل الفورم الخاص بك يظهر في منتصف الشاشة
الدالة CenterToScreen تقوم بعمل الخاصية StartPosition = FormStartPosition.CenterScreen
الان لكي تشاهد الفورم الخاص بك
قم بإضافة زر واكتب الاسطر التالية
private void button1_Click(object sender, EventArgs e)
{
new myform().Show();
this.Hide();
}
او بهذه الطريقة تنشئ اوبجكت من كلاس الفورم
myform f1 = new myform();
f1.Show();
ولاضافة أداة للفورم الخاص بك قم بتعريف اوبجكت من كلاس Button وتهيئه خصائصه
انشاء اوبجكت
Button btn = new Button()
{
Size = new Size(98, 45),
Text = "my button"
};
لكي تقوم باضافتة الى الفورم اكتب السطر التالي بداخل دالة البناء
this.Controls.Add(btn);
👍1
السلام عليكم
اليوم إن شاء الله سوف نقوم بعمل برنامج يقوم بعمل ScreenShot
يقوم بتصوير شاشة الكمبيوتر
👍🏻
اليوم إن شاء الله سوف نقوم بعمل برنامج يقوم بعمل ScreenShot
يقوم بتصوير شاشة الكمبيوتر
👍🏻
بسم الله الرحمن الرحيم
موضوع اليوم هو عن كيف تقوم بعمل برنامج يقوم بالتقاط صورة لشاشة الكمبيوتر
يوجد عدة طرق الأولى باستخدام اختصار PrintScrn الموجود في الكيبور د
والأخرى عنطريق انشاء صورة من نوع Bitmap و استخدام كلاس Graphics
سوف نبدا بشرح الطريقة الأولى
في البداية قمنا بانشاء مشروع يحتوي على 2 فورمات
الفورم الأول يحتوي على زر لالتقاط صورة الشاشة
بعد الضغط على زر التقاط الشاشة ينتقل مباشرة للفورم الثاني والذي يحتوي على أداة pictureBox تقوم بعرض الصورة التي تم تصوريها مع أداة MenuStrip خيار لحفظ الصورة
أداة pictureBox اجعل خاصية محدد الوصول public
نشرح الاكواد
الزر الموجود في الفورم الأول
private void button1_Click(object sender, EventArgs e)
{
this.Opacity = .0;
string PrintSC = "{PrtSc}";
SendKeys.SendWait(PrintSC);
ShowScreenShot f2 = new ShowScreenShot();
f2.pictureBox1.Image = Clipboard.GetImage();
f2.ShowDialog();
this.Opacity = 1.00;
}
زر Save في الفورم الثاني
private void saveToolStripMenuItem_Click(object sender, EventArgs e)
{
SaveFileDialog sfd = new SaveFileDialog();
sfd.Filter = "ملفات الصور |*.jpg; *.png; *.gif";
if (sfd.ShowDialog() == DialogResult.OK)
{
pictureBox1.Image.Save(sfd.FileName);
MessageBox.Show("تم الحفظ بنجاح", "حفظ", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
موضوع اليوم هو عن كيف تقوم بعمل برنامج يقوم بالتقاط صورة لشاشة الكمبيوتر
يوجد عدة طرق الأولى باستخدام اختصار PrintScrn الموجود في الكيبور د
والأخرى عنطريق انشاء صورة من نوع Bitmap و استخدام كلاس Graphics
سوف نبدا بشرح الطريقة الأولى
في البداية قمنا بانشاء مشروع يحتوي على 2 فورمات
الفورم الأول يحتوي على زر لالتقاط صورة الشاشة
بعد الضغط على زر التقاط الشاشة ينتقل مباشرة للفورم الثاني والذي يحتوي على أداة pictureBox تقوم بعرض الصورة التي تم تصوريها مع أداة MenuStrip خيار لحفظ الصورة
أداة pictureBox اجعل خاصية محدد الوصول public
نشرح الاكواد
الزر الموجود في الفورم الأول
private void button1_Click(object sender, EventArgs e)
{
this.Opacity = .0;
string PrintSC = "{PrtSc}";
SendKeys.SendWait(PrintSC);
ShowScreenShot f2 = new ShowScreenShot();
f2.pictureBox1.Image = Clipboard.GetImage();
f2.ShowDialog();
this.Opacity = 1.00;
}
زر Save في الفورم الثاني
private void saveToolStripMenuItem_Click(object sender, EventArgs e)
{
SaveFileDialog sfd = new SaveFileDialog();
sfd.Filter = "ملفات الصور |*.jpg; *.png; *.gif";
if (sfd.ShowDialog() == DialogResult.OK)
{
pictureBox1.Image.Save(sfd.FileName);
MessageBox.Show("تم الحفظ بنجاح", "حفظ", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}