المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : الدرس الثاني والخمسون : Windows Forms - دورة .net 2008


khaledbelal
03-04-2010, 03:20 AM
بسم الله الرحمن الرحيم .
السلام عليكم ورحمة الله وبركاته .

خلال هذه السلسلة ، كانت الخطة أنني اقوم بالانتهاء من شرح جميع النقاط الغير متعلقة بالواجهات من خلال Console ، وكان موعدنا الاسبوعي مع ADO.net ، لكننا سنأجل هذه الدروس لنتعرف على الواجهات وما يتعلق بها من تقنيات مثل WPF ، قبل ان نعود لنواصل دروسنا من خلال الواجهات ونكمل النقاط المتبقية لنا وهي :

- Object Serlization And XML .
- ADO.net .
- LINQ .
- WCF .
- WWF .
- وأخيراً ASP.net .
- ختم الحلقات ببعض المواضيع العامة اضافة إلى مشروع .

لذا فهذا هو جدولنا بعد الانتهاء من الواجهات خلال هذا الاسبوع إن شاء الله ...

مقدمة :

تعتبر الكلمة Viusal التي اصبحت متلازمة مع اغلب لغات البرمجة هي الحل السحري لمشاكل تصميم واجهات مناسبة للمستخدم ، في عصر ما قبل لغات البرمجة Visual كنت ستكون مجبر على رسم واجهاتك بالكود ، مع ما يعنيه ذلك من صعوبة وتأخير في وقت التنفيذ اضافة إلى انخفاض مستوى التصميم .

في .net جاءت المكتبة System.Windows.Forms لتقدم لك كل ما تحتاج إليه لتصميم واجهة مناسبة ، هناك أيضاً مجموعة دوال API تعرف باسم GDI+ تمكنك من زيادة كفاءتك الرسومية من خلال مجموعة من الأوامر المخصصة للرسومات 2D ، أخيراً ومع .net 3.0 جاءت لنا مايكروسوفت بتقنية Windows Presentation Foundation او ما تعرف اختصاراً باسم WPF لتزيد من كفاءة الرسوميات ضمن تطبيقات البرمجة لحد مرتفع جداً .

في دورسنا لهذا الاسبوع سوف نبدأ بالتعرف على System.Windows.Forms وربما على ال GDI+ أيضاً ، في حين سنترك عالم WPF للاسابيع القادمة إن شاء الله .

بناء Windows Forms بالكود :

قبل أن نبدأ باستخدام المعالجات الجاهزة التي وفرتها لنا مايكروسوفت ضمن Visual Studio ، يفضل ان نقوم بمحاولة بناء نموذج بعيداً عنها حتى نستطيع فهم كيفية عمل Windows Forms .

لذا قم بفتح المفكرة Notepad ، قم بانشاء ملف مثلاً باسم WindowsForms.cs ، ومن ثم سنبدأ في كتابة الكود .

أولاً سنقوم بتعريف كلاس مشتق من الفئة Forms بالشكل التالي مثلاً :

C#:

class SimpleWindow : Form
{
}

vb.net:

Class SimpleWindow
Inherits Form

End Class
والآن سنقوم في حدث Main باستدعاء نسخة منه ، لا تنسى اضافة مكتبات System.Windows.Forms ، لذا سيكون الكود بالكامل بالشكل التالي :

C#:

using System;
using System.Windows.Forms;
namespace WindowsForms
{
class Program
{
static void Main()
{
Application.Run(new SimpleWindow ());
}
}
}
class SimpleWindow : Form
{
}

vb.net:

Imports System
Imports System.Windows.Forms
Namespace WindowsForms

Class Program
Private Shared Sub Main()
Application.Run(New SimpleWindow())
End Sub
End Class

End Namespace
Class SimpleWindow
Inherits Form

End Class
الآن فقط كل ما عيك هو فتح Cmd الخاص بك ، وكتابة أمر مثل التالي :

csc /target:winexe *.cs

طبعاً بعد الذهاب لمسار البرنامج ، وبعد تعريف csc لتكون جاهزة للاستخدام في أي مكان ، سيكون الناتج شيئاً مثل هذا :

http://vb4arab.com/vb/uploaded/3/01213695997.gif

والآن بامكاننا التحكم في بعض الخصائص ، مثل الطول والعرض . الشفافية .... الخ من الخصائص أو حتى تنفيذ الأوامر التي يمكن الوصول إليها من خلال Object Browser بالشكل التالي مثلاً :

http://vb4arab.com/vb/uploaded/3/11213695997.gif

لذا نجد ان بامكاننا مثلاً تغيير الطول والعرض وتوسيطه ، لذا سيكون كود الفورم بالشكل التالي :
C#:

class SimpleForm : Form
{
public SimpleForm (int height, int width, bool center)
{
Width = width;
Height = height;
if(center) CenterToScreen();
}
}

vb.net:

Class SimpleForm
Inherits Form
Public Sub New(ByVal height As Integer, ByVal width As Integer, ByVal center As Boolean)
Width = width
Height = height
if center=True Then
CenterToScreen()
End If
End Sub
End Class

لكن لا تنس أنك في Run سوف تقوم بتمرير بارميترات إلى الفئة ، بالشكل التالي مثلاً :
C#:

static void Main()
{
Application.Run(new MainWindow(200, 300,True));
}
vb.net:

Private Shared Sub Main()
Application.Run(New MainWindow(200, 300, [True]))
End Sub

لا تنس طبعاً انه بامكانك الحصول على هذه القيم من خلال Args كما تعلمنا سابقاً ....

اضافة أدوات بالكود :

تعلمنا رسم الفورم بالكود ، جاء الدور الآن على وضع الأدوات المختلفة على الفورم ، يتم ذلك بالواقع من خلال الأوامر التالية :

Add()
AddRange()
لعمليات الاضافة .
Clear()
حذف الجميع .
Count
عدد الادوات ، في الواقع هذه الخاصية مفيدة جداً عند محاولات المرور على الأدوات .
Remove()
RemoveAt()
للحذف .

أما الأدوات التي يمكنك اضافتها ، فجميعها موجود تحت الفئة System.Windows.Forms ، حيث تجد كل الادوات التي تعودت على رؤيتها ...

مثال : اضافة قائمة File - Exit :
سنحاول الوصول للشكل التالي حيث يمكن الخروج بالضغط على زر Exit في القائمة :

http://vb4arab.com/vb/uploaded/3/21213695997.gif

الكود سيكون بسيطاً ، سنقوم بتعريف MenuStrip للقائمة ومن ثم ToolStripMenuItem لعناصر القائمة :
C#:

private System.Windows.Forms.MenuStrip menuStrip1;
private System.Windows.Forms.ToolStripMenuItem fileToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem exitToolStripMenuItem;

vb.net:

Private menuStrip1 As System.Windows.Forms.MenuStrip
Private fileToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem
Private exitToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem


الخطوة الثانية هي عمل دالة في ال Constructor وليكن اسمها BuildForm ، بدلاً من وضع الاكواد مباشرة في ال Constructor .
C#:

public SimpleForm()
{
Text="Example. Simple Form";
BuildForm();
}

vb.net:

Public Sub New()
Text = "Example. Simple Form"
BuildForm()
End Sub


الآن سنقوم ببرمجة هذه الدالة ، سنقوم بوضع اسماء للعناصر ونضيفها باستخدام Add للقائمة الرئيسية :
C#:

fileToolStripMenuItem.Text = "&File";
menuStrip1.Items.Add(mnuFile);
exitToolStripMenuItem.Text = "E&xit";
menuStrip1.DropDownItems.Add(mnuFileExit);

vb.net:

fileToolStripMenuItem.Text = "File"
menuStrip1.Items.Add(mnuFile)
exitToolStripMenuItem.Text = "Exit"
menuStrip1.DropDownItems.Add(mnuFileExit)


الخطوة الثانية هي اضافة Handler لحدث الضغط لعنصر Exit بالشكل التالي :
C#:

exitToolStripMenuItem.Click += new System.EventHandler(this.exitToolStripMenuItem_Cli ck);


vb.net:

AddHandler exitToolStripMenuItem.Click, AddressOf exitToolStripMenuItem_Click


أخيراً سنعتمد القائمة الرئيسية لتكون القائمة الخاصة بال Form بالشكل التالي بعد اضافتها للفورم :

C#:

Controls.Add(this.mnuMainMenu);
MainMenuStrip = this.menuStrip1;

vb.net:

Controls.Add(Me.mnuMainMenu)
MainMenuStrip = Me.menuStrip1

الآن سوف نقوم بكتابة الحدث الخاص بالضغط على زر Exit :
C#:

private void exitToolStripMenuItem_Click(object sender, EventArgs e)
{
Application.Exit();
}

vb.net:

Private Sub exitToolStripMenuItem_Click(ByVal sender As Object, ByVal e As EventArgs)
Application.[Exit]()
End Sub



بهذا يكون الكود الاجمالي بالشكل التالي :
c#:

class SimpleForm: Form
{
private System.Windows.Forms.MenuStrip menuStrip1;
private System.Windows.Forms.ToolStripMenuItem fileToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem exitToolStripMenuItem;
public SimpleForm()
{
Text="Example. Simple Form";
BuildForm();
}
private void BuildForm()
{
fileToolStripMenuItem.Text = "File";
menuStrip1.Items.Add(mnuFile);
exitToolStripMenuItem.Text = "Exit";
menuStrip1.DropDownItems.Add(mnuFileExit);
exitToolStripMenuItem.Click += new System.EventHandler(this.exitToolStripMenuItem_Cli ck);

Controls.Add(this.mnuMainMenu);
MainMenuStrip = this.menuStrip1;
}

private void exitToolStripMenuItem_Click(object sender, EventArgs e)
{
Application.Exit();
}
}
vb.net:

Class SimpleForm
Inherits Form
Private menuStrip1 As System.Windows.Forms.MenuStrip
Private fileToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem
Private exitToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem

Public Sub New()
Text = "Example. Simple Form"
BuildForm()
End Sub
Private Sub BuildForm()
fileToolStripMenuItem.Text = "&File"
menuStrip1.Items.Add(mnuFile)
exitToolStripMenuItem.Text = "E&xit"
menuStrip1.DropDownItems.Add(mnuFileExit)
AddHandler exitToolStripMenuItem.Click, AddressOf exitToolStripMenuItem_Click


Controls.Add(Me.mnuMainMenu)
MainMenuStrip = Me.menuStrip1
End Sub


Private Sub exitToolStripMenuItem_Click(ByVal sender As Object, ByVal e As EventArgs)
Application.[Exit]()
End Sub
End Class


في الدرس القادم سوف نقوم ببناء نفس التطبيق ولكن من خلال Visual Studio.net ...

انشاء فورم عن طريق Viusal Studio.net :
فقط افتح Visual Studio 2008 ، من قائمة File-New قم باختيار Windows Forms Application :

http://vb4arab.com/vb/uploaded/3/01213697331.gif

الآن من القائمة الجانبية Tool Box اختر MenuStrip ، ستجد الشكل التالي :

http://vb4arab.com/vb/uploaded/3/11213697331.gif

الآن وكما فعلت قم بالتفرع كما تريد وتصميم القائمة ، عند الضغط مرتين على العنصر Exit ستجد الأمر جاهزاً للكتابة بالشكل التالي :

http://vb4arab.com/vb/uploaded/3/21213697331.gif

الآن اكتب الكود ، ومن ثم اضغط على F5 وجرب .
والآن ألا تتفق معي أن الوضع أصبح أسهل كثيراً ....

في الدرس القادم سوف نتعرف على التعامل مع الواجهة الرسومية وما يتعلق بها ، قبل ان ننتقل للأدوات والخصائص في موجز سريع ...

الآن ، سنتعرف على محتويات الواجهة الرئيسية .

في مرحلة سابقة من الدروس تعرفنا على بعض النقاط في واجهة Visual Studio ، الآن سنواصل التعرف على النقاط الخاصة بالواجهة الرسومية .

ToolBox :
يحتوي على الأدوات الرئيسية التي نحتاج اليها ، لو لم يكن ظاهراً يمكننا اظهاره من View - ToolBox .

أهم الادوات التي نحتاج إليها موجودة تحت التبويب All Windows Forms ، مع ذلك ما زال بامكاننا اضافة تبويب جديد واضافة أدوات أخرى إليه ، عن طريق Add Tab ومن ثم Choose Item واختيار العنصر الذي ترغب فيه :

http://vb4arab.com/vb/uploaded/3/01213698236.gif

Tabs Group :

http://vb4arab.com/vb/uploaded/3/11213698236.gif

يحتوي على جميع ما قمت بفتحه ، حيث يمكنك التنقل بينها .


Properties Windows :

http://vb4arab.com/vb/uploaded/3/21213698236.gif

تجد فيها الخصائص التي ترغب في تعديلها لأي عنصر يتم تحديده على الفورم ، هذه الصورة توضح خصائص احد عناصر القائمة :


Solution Explorer :

http://vb4arab.com/vb/uploaded/3/31213698236.gif

يمكنك من تصفح محتويات مشروعك من نوافذ Forms أو فئات Classes او حتى صور و Resources :


Class View :

http://vb4arab.com/vb/uploaded/3/41213698236.gif

استعراض الفئات الموجودة لديك وخصائصها ودوالها وخلافه .

كيف يعمل ال Visual Studio.net في انشاء النماذج ؟

بنفس الطريقة التي تعلمناها بالكود ، ستجد لديك من قائمة Solution Explorer ثلاثة ملفات :

Form1.cs :
سيمكنك من التحكم في الفورم يدوياً عن طريق الوضع [Design] ايضاً تجد الأكواد التي قمت بكتابتها في هذا الملف ، يقوم كثير من المبرمجين بالتبديل بين الوضعين بالتنقل من القائمة العلوية ، او الضغط مرتين على اي اداة لفتح الكود الخاص بها . يمكنك عمل ذلك بطريقة مثالية عن طريق الضغط على الفورم بزر الماوس الأيمن واختيار الوضع Design - Code أو حتى Class Diagram .

Form1.Designer.cs :
هنا تجد الاكواد الخاصة بانشاء الأدوات والفورم ، لو قمت بفتحه ستجد اكواداً شبيهة بتلك التي استخدمناها في الجزء الأول من هذا الدرس :

http://vb4arab.com/vb/uploaded/3/01213698708.gif


Form1.rex :
يحتوي على المصادر المستخدمة وخلافه .

الفئات الرئيسية لعناصر Windows.Forms :
الفورم هو العنصر الاساسي في هذه الفئة ، وهو مشتق من الفئات التالية :

System.Object
العنصر الاساسي لكل كائنات .net

System.MarshalByRefObject.
لنتمكن من الوصول byref إلى الفورم

System.ComponentModel.Component
لثالث مشتق من ال Interface المسمى IComponent

System.Windows.Forms.Control.
سنتناوله بالتفصيل لاحقاً .

System.Windows.Forms.ScrollableControl
من اجل استخدام ال Scrolls ، اي عنصر مشتق منها يمكن ان يتمتع بهذه الخاصية .

System.Windows.Forms.ContainerControl
من اجل جعله يمكن ان يحتوي على Controls أخرى ، اي عنصر مشتق منها يمكن ان يحتوي بداخله على عناصر أخرى .

System.Windows.Forms.Form
سنتناوله بالتفصيل لاحقاً .

ذكرنا أن ال Form مشتق من الفئة System.Windows.Forms.Form ، لذا فإن جميع خصائص ودوال وأحداث هذه الفئة تنتقل له بالتبعية ، وهي ما سنتعرف عليها الآن :

خصائص الفئة Form :

AcceptButton : تحديد الزر الذي يتم تنفيذ أوامره عند ضغط المستخدم على Enter .
ActiveMDIChild : عندما يكون للفورم أبناء ، يتم هذا لتحديد الإبن النشط .
IsMDIChildIsMDIContainer : لتحديد امكانية جعل هذا الفورم حاضن لفورمات أخرى .
CancelButton : تحديد الزر الذي يتم تنفيذ أوامره عندما يضغط المستخدم على زر Esc .
ControlBox : تحديد هل للفورم Control Box أم لا .
FormBorderStyle : تحديد شكل حدود الفورم .
Menu : تحديد القائمة الرئيسية للفورم .
MaximizeBox : عرض زر التكبير والتصغير أم لا ، ستجد واحدة أخرى باسم Minimize لعرض زر وضعه في الشريط السفلي .
ShowInTaskbar : تحديد العرض في الشريط السفلي للويندوز أم لا .
StartPosition : تحديد نقطة البداية للفورم عند ظهوره لأول مرة ، يتم اختيارها من enumeration المسمى FormStartPosition والذي يحتوي على العناصر التالية :

http://vb4arab.com/vb/uploaded/3/01213700207.gif

WindowState : تحديد حالة الفورم والتي يتم اختيارها من ال enumeration المسمى FormWindowState والذي يحتوي على العناصر التالية :

http://vb4arab.com/vb/uploaded/3/11213700207.gif

دوال الفئة Form :

Activate() : لتنشط الفورم .
Close() : اغلاق الفورم .
CenterToScreen() : وضع الفورم في منتصف الشاشة .
LayoutMDI() : تحديد نظام عرض الشاشات الأبناء في حالة وجودها
ShowDialog() : عرض الفورم بصورة Dialog بحيث لا يمكن الرجوع لما خلفها إلا بعد اغلاقها .

أحداث الفئة Form :

Activated : ينطلق هذا الحدث عندما يتم تنشيط الفورم سواء بأمر Activate او عندما يقوم المستخدم بجعله النافذة النشطة على سطح مكتبه .
Closing : عندما يبدأ حدث الإغلاق .
Closed : عندما ينتهي حدث الإعلاق .
Deactivate : عندما يذهب التحكم إلى شيء آخر غير الفورم .
Load : عندما يتم تحميل الفورم ، ولكن ينطلق هذا الحدث قبل ظهور الفورم على الشاشة أصلاً - لتجنب واحد من أكثر الأخطاء شيوعاً - .
MDIChildActive : عند تحديد واحد من الشاشات الأبناء في حالة وجودها .

كما ذكرنا ايضاً سابقاً ، فإن الفورم مشتق من الفئة Controls ، ولذا فهو يتمتع بكافة مميزاتها والتي سنستعرضها هنا .

خصائص الفئة Controls :

BackColor : لون الخلفية .
ForeColor : لون النص الداخلي .
BackgroundImage : خلفية صورة .
Font : الخط وحجمه ونوعه وخلافه .
Cursor : نوع المؤشر الذي يظهر عند العبور فوق الأداة أو الفورم .
Anchor : للتعامل مع خاصية ال Dock والتي تثبت مكان الادوات على الفورم مهما تغير حجم الفورم .
AutoSize : حجم تلقائي للاداة حسب محتوياتها .
Top : موضع الاداة او الفورم من الحد العلوي للاب.
Left : موضع الاداة او الفورم من الحد الأيسر للأب .
Bottom : موضع الاداة او الفورم من الحد الأسفل للأب .
Right : موضع الاداة او الفورم من الحد الأيمن للأب .
Bounds : الحدود .
ClientRectangle : من مربع .
Height : الطول .
Width : العرض .
Enabled : تحديد امكانية التحكم بالأداة او الفورم من عدمه .
Visible : الظهور والاختفاء .
ModifierKeys : قراءة حالة ال ModifierKeys مثل ال Alt و Ctrl و Shift .
MouseButtons : معرفة الزر المضغوط من الماوس ( أيمن - ايسر - المنتصف ) .
TabIndex: تحدد ترتيب العناصر للانتقال بينها بواسطة زر Tab .
TabStop : منع الوصول للعنصر من خلال زر Tab .
Opacity : درجة الشفافية ما بين 0 و 1 .
Text : النص المعروض داخل الاداة .
Controls : تمكنك من الوصول للاداوات الداخلية في حالة كان العنصر قادراً على استيعاب عناصر داخله .

أحداث الفئة Controls :

Click : الضغط بالماوس .
DoubleClick : ضغطتين بالماوس .
MouseEnter : دخول الماوس .
MouseLeave : خروج الماوس من نطاق الاداة .
MouseDown : ضغط زر الماوس لاسفل .
MouseUp : رفع الاصبع عن ضغطة زر الماوس .
MouseMove : عبور الماوس فوق نقطة .
MouseHover
MouseWheel : الضغط على ال Wheel
KeyPress : ضغط زر .
KeyUp : ضغط زر لاسفل .
KeyDown : رفع الاصبع عن الزر المضغوط .
DragDrop : سحب اداة فوق .
DragEnter : دخول اداة لمجال اداة أخرى .
DragLeave : خروج .
DragOver : عبور فوق .
Paint : حدث الرسم .

ذكرنا في الدرس السابق بإننا سنقوم باستعراض الأدوات ، أول نقطة عليك معرفتها هي أن كل الأدوات مشتقة من الفئة Controls لذا فإن أي
أداة ستتمتع بالخصائص والأحداث التي قمنا بشرحها في الدرس السابق مباشرة .

الآن سنستعرض بعض الأدوات الرئيسية لدينا .

Button :
زر أمر عادي جداً ، يحتوي على بعض الخصائص مثل :
FlatStyle : تحديد مظهر زر الأمر .
TextAlign : موضع النص من زر الأمر .

CheckBox :
زر الاختيار المتعدد ، يمكننا اختيار عدة عناصر ، يحتوي على خصائص اضافية مثل :
CheckState : حالة الاختيار .
ThreState : لتحديد كونه يحمل خاصية ثالثة ( مفعل - غير مفعل - مفعل جزئياً ) .

RadioButton :
مثل السابق ولكنه يسمح لك باختيار واحد ، لو كنت تريد استخدامه لأكثر من مرة ضع كل منهم في panel مختلف .
ComboBox و ListBox .
قائمة للاختيار من ضمن خيارات ، الاولى في صف واحد والثانية حسب الحجم المطلوب .
يحتوي على جميع الخصائص التي تعلمناها في Collection.List مثل Items.Add و Items.Remove ....
الخ .


Textbox :
أداة نصية تسمح للمستخدم بالكتابة داخلها ، بعض خصائصها الاضافية .
ReadOnly : جعلها للقراءة فقط .
PasswordChar : الرمز الذي يظهر في حالة جعل مربع النص للادخال .
MultiLine : السماح بجعلها متعددة الأسطر .
maxLength : الطول الاقصى للنص .
ScrollsBar : اشرطة التمرير حيث انها مشتقة من الفئة
System.Windows.Forms.ScrollableControl ، لذا سيكون بامكاننا اختيار وضع من ال enumeration المسمى ScrollBars :

لمعرفة المزيد عن هذه الاداة يمكن مراجعة درس الاخ أحمد بدر هنا :
http://vb4arab.com/vb/showthread.php?t=4763

Label :
أداة لعرض النصوص .
GroupBox و Panel :
أدوات حاوية يمكن وضع أدوات أخرى بداخلها .

RichTextBox :
أداة نص تسمح لمحتوياتها ان تحتوي على تنسيقات مختلفة ، الفارق بينها وبين TextBox هو الفارق بين Notepad و Wordpad ،
تحتوي على الخصائص الاضافية التالية :
Wordwrap : لتحديد التفاف النص .
Select : لتحديد جزء من النص عن طريق نقطة بداية ونهاية ، او نقطة بداية وطول .
SelectionXXX : لتحديد تنسيق خط للجزء المحدد ، مثل اللون SelectionColor .

كما يحتوي على الدوال الاضافية التالية :
LoadFile : لفتح ملف نصي من مسار معين .
SaveFile : لحفظ الملف في مكان معين .

يمكنك التعرف على المزيد عنها من خلال درس الأخ أحمد بدر هنا :
http://vb4arab.com/vb/showthread.php?t=4638

Timer :
أداة للمؤقت ، لها حدث Ticker والذي يتم تنفيذه كل Interval معين ، تفيد في حالة عمل اوامر تكراريه بفوارق زمنية .

TreeView :
لعرض أداة الشجرة ، عنصرها الاساسي هو Nodes والذي يمكن من خلاله اضافة أي عناصر وحذفها .

Progressbar :
لعرض مؤشر التقدم ، خصائصه الاساسية هي Minimum - Maximum لتحديد الحد الأعلى والأدنى اضافة للخاصية Step لتحديد مقدار التقدم كل مرة ، يمكنك تحديد style لعملية التقدم من خلال الخاصية Style والتي تقرأ من ال enumeration المسمى ProgressBarStyle .
يمكن تحديد الخاصية لاحقاً باستخدام الخاصية Value .

يمكنك التعرف على المزيد عنها من خلال درس الأخ أحمد بدر هنا :
http://vb4arab.com/vb/showthread.php?t=4810

Trackbar :
مشابه لل Progressbar لكنك انت من تتحكم بقيمته ، مثل Trackbar الخاص برفع وخفض الصوت .

DateTimePicker
أداة لاختيار التواريخ والأوقات ، يمكنك التعرف على المزيد عنها من خلال درس الأخ أحمد بدر هنا :
http://vb4arab.com/vb/showthread.php?t=4761

الأدوات كثيرة جداً ولا جدوى من اضاعة الوقت في التعرف على تفاصيلها ... لذا أكتفي بأن احيلك إلى موقع مايكروسوفت حيث تجد شرحاً تفصيلياً لكل أداة :
http://msdn.microsoft.com/en-us/library/aa984065(VS.71).aspx

هناك عناصر أخرى هي ال Dialogs سنتعرف عليها في مرة قادمة إن شاء الله ...
راحة قصيرة أعود بعدها للإكمال إن شاء الله ...

Dialogs :

في بداية موضوعنا عن المربعات الحوارية سنقوم أولاً بتصميم واحد خاص بنا ، ثم في المرحلة الثانية سنقوم بالتعرف على استخدامات بعض المربعات الحوارية الشائعة .

قم بانشاء فورم جديد ، قم بالغاء خاصية ال resizeable ، قم بضبط خاصية FormBorderStyle إلى FixedDialog ، قم باخفاء MinimizeBox و MaximizeBox ... بهذه الطريقة يكون تصميم أغلب المربعات الحوارية .

الآن قم بتصميم المربع الحواري كما يحلو لك ، في اي مربع حواري أو Dialog يكون الناتج واحداً من العناصر المعرفة في enumeration المسمى DialogResult والذي يحتوي على القيم التالية :

رمز:

Abort, Cancel, Ignore, No, None, OK, Retry, Yes
لضبط الزر الذي يعيد القيمة OK نضبط خاصية ال AcceptButton للفورم على الزر المختار .
ايضاً الامر بسيط بالنسبة للخاصية Cancel حيث نجد الخاصية CancelButton .

لاظهار فورم بصورة مربع حواري Dialog نستخدم الأمر ShowDialog بالشكل التالي مثلاً :
رمز:

newDialog.ShowDialog()
ولكن وبما اننا بحاجة لقراءة القيم الناتجة عنه ومعرفة اي زر تم اختياره ، سنكتب الكود الخاص بنا بالشكل التالي على سبيل المثال :

C#:

if (newDialog.ShowDialog() == DialogResult.Cancel)
{
// do something
}
else if (newDialog.ShowDialog() == DialogResult.Ok)
{
// do something else
}

vb.net:

If newDialog.ShowDialog() = DialogResult.Cancel Then
' do something
ElseIf newDialog.ShowDialog() = DialogResult.Ok Then
' do something else
End If

ولو حاولنا قراءة محتويات ال Dialog سيكون لزاماً علينا تعريف القيم المطلوبة public ، لذا قم مثلاً بتعديل مربع النص بالشكل التالي :

public System.Windows.Forms.TextBox TextBox1;

MessageBox:

النوع الابسط والأسهل من ال Dialogs هو رسائل التحذير MessageBox ، صورتها الأبسط بالشكل التالي :


MessageBox.Show("Welcome ...");

لو جربت معرفة البارميترات التي يمكن ارسالها للدالة Show ستجد 20 overloads ، تتيح لك التحكم بأي شكل في رسائلك التحذيرية ، سنستعرض اثنين منها هنا :

- اظهار رسالة تحذيرية كاملة :
الكود :

MessageBox.Show("Welcome ...","Title",MessageBoxButtons.OK,MessageBoxIcon.Exclamation);


المظهر :

http://vb4arab.com/vb/uploaded/3/01213715555.jpg

- اظهار رسالة تحذيرية تخيرك بين عدة حالات ، مع جعل واحد منها افتراضياً .
C#:

DialogResult reslt = MessageBox.Show("Do you want to save", "Title", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Exclamation,MessageBoxDefaultButton .Button1);
if (reslt = DialogResult.Yes)
MessageBox.Show("you want to save.");
else if (reslt = DialogResult.No)
MessageBox.Show("you don't want to save.");
else if (reslt = DialogResult.Cancel)
MessageBox.Show("you cancel this operation.");


vb.net:

Dim reslt As DialogResult = MessageBox.Show("Do you want to save", "Title", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1)
If reslt = DialogResult.Yes Then
MessageBox.Show("you want to save.")
ElseIf reslt = DialogResult.No Then
MessageBox.Show("you don't want to save.")
ElseIf reslt = DialogResult.Cancel Then
MessageBox.Show("you cancel this operation.")
End If

هناك عدة اختيارات أخرى ، تتيح لك اظهار ملف مساعدة ... الخ ، يمكنك استعراضها جميعاً من خلال هذا الرابط :
http://msdn.microsoft.com/en-us/library/system.windows.messagebox.show.aspx

Dialogs Controls .

بعد ان تعرفنا على النوع الأبسط من المربعات الحوارية وتعلمنا كيفية انشاءها ، جاء الدور الآن على تعلم كيفية استخدام المربعات الحوارية الأساسية الموجودة ضمن الأدوات ...


Color Dialog :
مربع اختيار الألوان ، قم باضافته من ال ToolBox وسننشأ الآن مثالاً بسيطاً لتغيير لون الخلفية لصورة مثلاً :

http://vb4arab.com/vb/uploaded/3/01213716371.jpg

ضف صورة picturebox زر أمر بسيط واكتب فيه الأمر التالي :
C#:

if (colorDialog1.ShowDialog() == DialogResult.OK)
pictureBox1.BackColor = colorDialog1.Color;
else
MessageBox.Show("cancel operation");

vb.net:

If colorDialog1.ShowDialog() = DialogResult.OK Then
pictureBox1.BackColor = colorDialog1.Color
Else
MessageBox.Show("cancel operation")
End If
هناك بعض الخصائص الاضافية في مربع الحوار هذا لكنها غير شائعة الاستخدام مثل AllowFullOpen والتي تستطيع منع المستخدم من اختيار غير الالوان القياسية بالشكل التالي مثلاً :

http://vb4arab.com/vb/uploaded/3/11213716371.jpg

والخاصية fullopen التي تظهرها بالكامل مباشرة بالشكل التالي مثلاً :

http://vb4arab.com/vb/uploaded/3/21213716371.jpg

رابط تفصيلي من مايكروسوفت :
http://msdn.microsoft.com/en-us/library/system.windows.forms.colordialog.aspx

Font Dialog :

يستخدم لاختيار الخطوط ، سنقوم الآن بعمل مثال لتغيير خط مربع نص :
http://vb4arab.com/vb/uploaded/3/01213716876.jpg


C#:

fontDialog1.ShowColor = true;
fontDialog1.Font = textBox1.Font;
fontDialog1.Color = textBox1.ForeColor;
if (fontDialog1.ShowDialog() == DialogResult.OK)
{
textBox1.Font = fontDialog1.Font;
textBox1.ForeColor = fontDialog1.Color;
}

vb.net:

fontDialog1.ShowColor = True
fontDialog1.Font = textBox1.Font
fontDialog1.Color = textBox1.ForeColor
If fontDialog1.ShowDialog() = DialogResult.OK Then
textBox1.Font = fontDialog1.Font
textBox1.ForeColor = fontDialog1.Color
End If


رابط تفصيلي من مايكروسوفت :
http://msdn.microsoft.com/en-us/library/system.windows.forms.fontdialog(VS.80).aspx

Open And Save Dialogs :

اشهر نوعين من المربعات الحوارية ، في العادة يتم استخدامهم لتحديد عملية فتح الملفات أو تحديد مكان حفظها ، سنقوم بعمل مثال بسيط نقوم من خلال بفتح ملف نصي ، التعديل عليه ومن ثم حفظه :
اضف مربع نص بسيط واجعل خاصية Multiline=True ، ضف زر للحفظ وآخر للفتح ، وأخيراَ لن نقوم باضافة OpenFileDialog و SaveFileDialog بل سنضيفهم من خلال الكود مباشرة .

أول عملية لدينا هي استخدام المربع الحواري لتحديد الملفات النصية ومن ثم اختيار واحد منها :
C#:


string fileToOpen="";
OpenFileDialog openFile = new OpenFileDialog();
openFile.DefaultExt = "txt";
openFile.Filter = "Word ********s (*.txt)|*.txt";
if (openFile.ShowDialog() == DialogResult.OK)
fileToOpen = openFile.FileName;


vb.net:

Dim fileToOpen As String = ""
Dim openFile As New OpenFileDialog()
openFile.DefaultExt = "txt"
openFile.Filter = "Word ********s (*.txt)|*.txt"
If openFile.ShowDialog() = DialogResult.OK Then
fileToOpen = openFile.FileName
End If


الآن اصبح لدينا مسار الملف في متغير ، سنقوم بعملية وضع محتوياته في مربع نص بطريقة تعلمناها سابقاً :
C#:

if (fileToOpen != "")
{
using (System.IO.StreamReader s1 = System.IO.File.OpenText(fileToOpen))
{
string input = null;
textBox1.Text = "";
while ((input = s1.ReadLine()) != null)
{
textBox1.Text += input;
}

}
}

vb.net:

If fileToOpen <> "" Then
Using s1 As System.IO.StreamReader = System.IO.File.OpenText(fileToOpen)
Dim input As String = Nothing
textBox1.Text = ""
While (input = s1.ReadLine()) IsNot Nothing
textBox1.Text += input


End While
End Using
End If

الآن سنستخدم مربع حوار الحفظ لتحديد المكان الذي نود فيه حفظ الملف :
C#:


string fileToSave = "";
SaveFileDialog saveFileDialog1 = new SaveFileDialog();
saveFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
fileToSave = saveFileDialog1.FileName;


vb.net:

Dim fileToSave As String = ""
Dim saveFileDialog1 As New SaveFileDialog()
saveFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*"
If saveFileDialog1.ShowDialog() = DialogResult.OK Then
fileToSave = saveFileDialog1.FileName
End If

وكما تعلمنا سابقاً ، نقوم بحفظ الملف النصي في المسار الذي قام المستخدم باختياره :
C#:

if (fileToSave!="")
{
using (System.IO.StreamWriter w1 = System.IO.File.CreateText(fileToSave))
{
w1.WriteLine(textBox1.Text);
}
}


vb.net:

If fileToSave <> "" Then
Using w1 As System.IO.StreamWriter = System.IO.File.CreateText(fileToSave)
w1.WriteLine(textBox1.Text)

End Using
End If


http://vb4arab.com/vb/uploaded/3/01213718148.jpg

هناك بعض الخصائص الاضافية لكلا الكائنين ، يمكنك الاطلاع على المزيد عنهما هنا :
http://msdn.microsoft.com/en-us/library/aa287592(VS.71).aspx
http://msdn.microsoft.com/en-us/library/system.windows.forms.savefiledialog.aspx
حيث يمكنك تحديد نوع من الملفات او قراءة اسم المجلد او اسم الملف فقط ، تحديد أكثر من ملف للفتح ... الخ .

print Dialog :

يستخدم للتحكم في خصائص عملية الطباعة ، يمكن ان يفيدك الرابط التالي من مايكروسوفت :

http://msdn.microsoft.com/en-us/library/system.windows.forms.printdialog.aspx

إلى هنا نكون قد انتهينا من محتويات هذا الدرس ، في الدرس القادم سنتعرف على كيفية التقاط أحداث الكيبورد والماوس .

والله الموفق ...
والسلام عليكم ورحمة الله وبركاته .

المشتاقة للجنة
03-04-2010, 01:55 PM
شـكــ وبارك الله فيك ـــرا لك . موفق بإذن الله

ماريا إسلام
12-17-2010, 10:18 AM
وعليكم السلااااااااااااام
جزااااكم الله خيرا كثيراااااااا
//