التعليقات

C # Programming Tutorial - برمجة Winforms المتقدمة في C #

C # Programming Tutorial - برمجة Winforms المتقدمة في C #

01 من 10

باستخدام عناصر التحكم في Winforms - متقدم

في هذا البرنامج التعليمي للبرمجة في C # ، سأركز على عناصر التحكم المتقدمة مثل ComboBoxes ، والشبكات ، و ListViews وأريكم الطريقة التي ستستخدمها على الأرجح. أنا لا أتطرق للبيانات والربط حتى يتم تشغيل برنامج تعليمي لاحقًا ، فلنبدأ في التحكم البسيط ، ComboBox.

التحكم Winform التحرير والسرد

في قلب Combo عبارة عن مجموعة عناصر وأبسط طريقة لتعبئة هذا هي إسقاط التحرير والسرد على الشاشة ، وحدد الخصائص (إذا لم تتمكن من رؤية نوافذ الخصائص ، انقر فوق عرض في القائمة العلوية ثم نافذة الخصائص) ، العثور على العناصر وانقر فوق زر علامات القطع. يمكنك بعد ذلك كتابة السلاسل وتجميع البرنامج وسحب التحرير والسرد لأسفل لرؤية الخيارات.

  • واحد
  • اثنان
  • ثلاثة

توقف الآن عن البرنامج وأضف بضعة أرقام أخرى: أربعة ، خمسة ... حتى عشرة. عند تشغيله ، سترى 8 فقط لأن هذه هي القيمة الافتراضية لـ MaxDropDownItems. لا تتردد في ضبطه على 20 أو 3 ثم قم بتشغيله لترى ما الذي يفعله.

إنه أمر مزعج أنه عندما يفتح فإنه يقول comboBox1 ويمكنك تحريره. هذا ليس ما نريد. ابحث عن خاصية DropDownStyle وقم بتغيير DropDown إلى DropDownList. (إنه تحرير وسرد!). الآن لا يوجد نص وهو غير قابل للتحرير. يمكنك تحديد أحد الأرقام لكنه يفتح دائمًا فارغًا. كيف يمكننا اختيار رقم لتبدأ؟ حسنًا ، إنها ليست خاصية يمكنك تعيينها في وقت التصميم ، ولكن إضافة هذا السطر سيفعل ذلك.

comboBox1.SelectedIndex = 0؛

أضف هذا السطر في مُنشئ Form1 (). يجب عليك عرض الكود الخاص بالنموذج (في Solution Explorer ، انقر بزر الماوس الأيمن على From1.cs وانقر فوق عرض الكود. ابحث عن InitializeComponent () ؛ وأضف هذا السطر فورًا بعد ذلك.

إذا قمت بتعيين خاصية DropDownStyle للسرد إلى "بسيط" وقمت بتشغيل البرنامج ، فلن تحصل على شيء. لن تختار أو تنقر أو ترد. لماذا ا؟ لأنه في وقت التصميم ، يجب عليك إمساك المقبض السفلي المطاطي وجعل التحكم بالكامل أطول.

أمثلة كود المصدر

  • قم بتنزيل الأمثلة (الرمز البريدي)

في الصفحة التالية : Winforms ComboBoxes تابع

02 من 10

أبحث في مربع التحرير والسرد تابع

في المثال 2 ، قمت بإعادة تسمية ComboBox إلى combo ، غيرت التحرير والسرد DropDownStyle إلى DropDown بحيث يمكن تحريره وإضافة زر Add يسمى btnAdd. لقد نقرت مرتين على زر الإضافة لإنشاء معالج أحداث btnAdd_Click () للحدث وأضفت سطر الحدث هذا.

باطل خاص btnAdd_Click (مرسل الكائن ، System.EventArgs e)
{
combo.Items.Add (combo.Text)؛
}

الآن عند تشغيل البرنامج ، اكتب رقمًا جديدًا ، يقول أحد عشر ، ثم انقر فوق "إضافة". يأخذ معالج الأحداث النص الذي كتبته (في combo.Text) ويضيفه إلى مجموعة عناصر Combo. انقر فوق Combo ولدينا الآن إدخال جديد Eleven. هكذا تضيف سلسلة جديدة إلى Combo. لإزالة واحدة أكثر تعقيدًا قليلاً حيث يجب عليك العثور على فهرس السلسلة التي ترغب في إزالتها ثم إزالتها. طريقة RemoveAt الموضحة أدناه هي طريقة تجميع للقيام بذلك. عليك فقط تحديد أي عنصر في المعلمة Removeindex.

combo.Items.RemoveAt (RemoveIndex)؛

سوف يزيل السلسلة في الموضع RemoveIndex. إذا كانت هناك عناصر n في التحرير والسرد ، فإن القيم الصحيحة تكون من 0 إلى n-1. لعشرة عناصر ، القيم 0… 9.

في طريقة btnRemove_Click ، ​​يبحث عن السلسلة في مربع النص باستخدام

int RemoveIndex = combo.FindStringExact (RemoveText)؛

إذا لم يعثر هذا على النص ، فسوف يُرجع -1 وإلا فسيُرجع الفهرس القائم على 0 للسلسلة في قائمة التحرير والسرد. هناك أيضًا طريقة زائدة من FindStringExact تتيح لك تحديد المكان الذي تبدأ فيه البحث ، حتى تتمكن من تخطي الأول ، إلخ ، إذا كان لديك تكرارات. قد يكون هذا مفيدًا لإزالة التكرارات في القائمة.

يؤدي النقر فوق btnAddMany_Click () إلى مسح النص من التحرير والسرد ثم مسح محتويات مجموعة عناصر التحرير والسرد ثم استدعاء combo.AddRange (لإضافة السلاسل من صفيف القيم. بعد القيام بذلك ، فإنه يحدد SelectedIndex التحرير والسرد إلى 0. هذا يظهر العنصر الأول في التحرير والسرد. إذا كنت تقوم بإضافة أو حذف العناصر في مربع تحرير وسرد ، فمن الأفضل تتبع أي عنصر محدد .إعداد SelectedIndex على -1 يخفي العناصر المحددة.

يمسح الزر "إضافة الكثير" القائمة ويضيف 10000 رقم. لقد أضفت combo.BeginUpdate () وسرد ، EndUpdate () المكالمات حول الحلقة لمنع أي وميض من Windows يحاول تحديث عنصر التحكم. على جهاز الكمبيوتر الخاص بي البالغ من العمر ثلاث سنوات ، يستغرق الأمر أكثر من ثانية واحدة لإضافة 100.000 رقم إلى المجموعة.

في الصفحة التالية أبحث في ListViews

03 من 10

العمل مع ListViews في C # Winforms

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

بعد إسقاط ListView في نموذج ، انقر فوق خاصية الأعمدة وقم بإضافة 4 أعمدة. ستكون هذه هي TownName و X و Y و Pop. تعيين النص لكل ColumnHeader. إذا لم تتمكن من رؤية العناوين في ListView (بعد إضافة كل 4) ، فقم بتعيين خاصية عرض ListView على التفاصيل. إذا قمت بعرض الرمز الخاص بهذا المثال ، فاستعرض لأسفل إلى حيث يقول رمز مصمم نماذج Windows وقم بتوسيع المنطقة التي ترى فيها الكود الذي ينشئ ListView. من المفيد معرفة كيفية عمل النظام ويمكنك نسخ هذا الرمز واستخدامه بنفسك.

يمكنك ضبط العرض لكل عمود يدويًا عن طريق تحريك المؤشر فوق الرأس وسحبه. أو يمكنك القيام بذلك في التعليمات البرمجية المرئية بعد توسيع منطقة مصمم النموذج. يجب أن تشاهد رمز مثل هذا:

بالنسبة لعمود السكان ، تنعكس التغييرات في الكود في المصمم والعكس. لاحظ أنه حتى إذا قمت بتعيين الخاصية Locked على "صحيح" ، فإن ذلك يؤثر فقط على المصمم وفي وقت التشغيل يمكنك تغيير حجم الأعمدة.

تأتي ListViews أيضًا مع عدد من الخصائص الديناميكية. انقر فوق (الخصائص الديناميكية) وحدد الخاصية التي تريدها. عندما تقوم بتعيين خاصية لتكون ديناميكية ، فإنها تنشئ ملف .config XML وتضيفه إلى Solution Explorer.

إجراء تغييرات في وقت التصميم شيء واحد ، لكننا بحاجة فعلاً إلى القيام بذلك عند تشغيل البرنامج. يتكون ListView من 0 أو أكثر من العناصر. كل عنصر (ListViewItem) لديه خاصية نص ومجموعة SubItems. يعرض العمود الأول نص العنصر ، ويعرض العمود التالي SubItem0.text ثم SubItem1.text وما إلى ذلك.

لقد أضفت زرًا لإضافة صف ومربع تحرير لاسم البلدة. أدخل أي اسم في المربع وانقر فوق "إضافة صف". هذا يضيف صفًا جديدًا إلى ListView مع اسم المدينة الذي تم وضعه في العمود الأول ويتم تعبئة الأعمدة الثلاثة التالية (SubItems0 ... 2) بأرقام عشوائية (محولة إلى سلاسل) عن طريق إضافة هذه السلاسل إليها.

Random R = new Random ()؛
ListViewItem LVI = list.Items.Add (tbName.Text)؛
LVI.SubItems.Add (R.Next (100) .ToString ())؛ // 0… 99
LVI.SubItems.Add (R.Next (100) .ToString ())؛
LVI.SubItems.Add (((10 + R.Next (10)) * 50) .ToString ())؛

في الصفحة التالية : تحديث ListView

04 من 10

تحديث ListView برمجيا

بشكل افتراضي عند إنشاء ListViewItem ، فإنه يحتوي على 0 عناصر فرعية لذلك يجب إضافتها. لذلك ليس عليك فقط إضافة ListItems إلى ListView ولكن عليك أيضًا إضافة ListItem.SubItems إلى ListItem.

إزالة عناصر ListView برمجياً

الآن قم بتعيين خاصية ListView Multiselect إلى false. لا نريد سوى تحديد عنصر واحد في وقت واحد ، ولكن إذا كنت ترغب في إزالة المزيد دفعة واحدة ، فسيكون الأمر مشابهًا باستثناء ما عليك القيام به في الاتجاه المعاكس. (إذا قمت بالحلقة بالترتيب العادي وحذف العناصر ، فستكون العناصر التالية غير متزامنة مع الفهارس المحددة).

لا تعمل قائمة النقر بزر الماوس الأيمن بعد ، حيث لا توجد لدينا عناصر قائمة لعرضها. لذا ، انقر بزر الماوس الأيمن على PopupMenu (أسفل النموذج) وسترى قائمة السياق تظهر في أعلى النموذج حيث يظهر محرر القائمة العادي. انقر فوقه وأين تقول "الكتابة هنا" ، اكتب "إزالة العنصر". ستظهر نافذة الخصائص MenuItem لذا أعد تسمية mniRemove. انقر نقرًا مزدوجًا فوق عنصر القائمة هذا وستحصل على وظيفة رمز معالج الأحداث menuItem1_Click. أضف هذا الرمز بحيث يبدو هكذا.

إذا فقدت الرؤية الخاصة بإزالة العنصر ، فما عليك سوى النقر فوق عنصر تحكم PopupMenu من تلقاء نفسه أسفل النموذج الموجود في "مصمم النموذج". سوف يعيدها إلى العرض.

باطلة خاصة menuItem1_Click (مرسل الكائن ، System.EventArgs e)
{
ListViewItem L = list.SelectedItems0؛
إذا (L! = خالية)
{
list.Items.Remove (L) ؛
}
}

ومع ذلك ، إذا قمت بتشغيله ولم تقم بإضافة عنصر وتحديده ، فعند النقر بزر الماوس الأيمن على القائمة والحصول على القائمة والنقر فوق "إزالة العنصر" ، فسوف يقدم استثناءً لأنه لا يوجد عنصر محدد. هذه برمجة سيئة ، لذا إليك كيفية إصلاحها. انقر نقرًا مزدوجًا فوق الحدث المنبثق وأضف سطر التعليمات البرمجية هذا.

الفراغ الخاص PopupMenu_Popup (مرسل الكائن ، System.EventArgs e)
{
mniRemove.Enabled = (list.SelectedItems.Count> 0)؛
}

يعمل فقط على تمكين إدخال قائمة إزالة العنصر عندما يكون هناك صف محدد.

في الصفحة التالية

: استخدام DataGridView

05 من 10

كيفية استخدام DataGridView

يعد DataGridView المكون الأكثر تعقيدًا والأكثر فائدة الذي يتم توفيره مجانًا مع C #. إنه يعمل مع كلا مصدري البيانات (أي البيانات من قاعدة البيانات) وبدون (أي البيانات التي تضيفها برمجياً). بالنسبة لبقية هذا البرنامج التعليمي ، سأعرض استخدامه دون استخدام "مصادر البيانات" ، وبالنسبة للعرض الأكثر بساطة ، فقد تجد أن عرض القائمة سهل أكثر ملاءمة.

ماذا يمكن أن تفعل DataGridView؟

إذا كنت قد استخدمت عنصر تحكم قديم في DataGrid ، فهذه مجرد واحدة من تلك الموجودة على المنشطات: فهي تمنحك المزيد من أنواع الأعمدة المضمّنة ، ويمكنها التعامل مع البيانات الداخلية والخارجية ، ومزيد من التخصيص للعرض (والأحداث) وتمنحك المزيد من التحكم على التعامل مع الخلية مع تجميد الصفوف والأعمدة.

عند تصميم النماذج مع بيانات الشبكة ، من المعتاد تحديد أنواع أعمدة مختلفة. قد يكون لديك خانات اختيار في عمود واحد ، نص للقراءة أو قابل للتحرير في آخر ، وأرقام الدورات. عادةً ما يتم محاذاة هذه الأنواع من الأعمدة بشكل مختلف مع الأرقام المحاذاة لليمين عمومًا بحيث تتراكم العشرية. على مستوى العمود ، يمكنك الاختيار من زر ، مربع اختيار ، مربع تحرير وسرد ، صورة ، مربع نص وروابط. إذا لم تكن هذه كافية ، فيمكنك تحديد أنواعك المخصصة.

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

لنبدأ بإضافة بعض الأعمدة وإسقاط DataGridView في النموذج وانقر فوق السهم الصغير في الزاوية اليمنى العليا. ثم انقر فوق إضافة عمود. افعل هذا ثلاث مرات. سينبثق مربع حوار "إضافة عمود" حيث يمكنك تعيين اسم العمود ، والنص الذي سيتم عرضه في أعلى العمود ويسمح لك باختيار نوعه. العمود الأول هو YourName وهو TextBox الافتراضي (dataGridViewTextBoxColumn). اضبط نص الرأس على اسمك أيضًا. اصنع العمود الثاني Age واستخدم ComboBox. العمود الثالث مسموح به وهو عمود CheckBox.

بعد إضافة الثلاثة ، سترى صفًا من ثلاثة أعمدة تحتوي على مجموعة تحرير وسرد في العمود الأوسط (Age) ومربع اختيار في العمود المسموح به. إذا قمت بالنقر فوق DataGridView ، في عارض الخصائص ، يجب عليك تحديد موقع الأعمدة والنقر فوق (مجموعة). هذا ينبثق مربع حوار حيث يمكنك تعيين خصائص لكل عمود مثل ألوان الخلايا الفردية ، ونص تلميح الأدوات ، والعرض ، والحد الأدنى للعرض وما إلى ذلك. إذا قمت بترجمة وتشغيل ، ستلاحظ أنه يمكنك تغيير عرض الأعمدة ووقت التشغيل. في عارض الخصائص لـ DataGridView الرئيسي ، يمكنك ضبط AllowUser على تغيير حجم الأعمدة إلى false لمنع ذلك.

في الصفحة التالية:

إضافة صفوف إلى DataGridView

06 من 10

إضافة صفوف إلى DataGridView برمجياً

سنقوم بإضافة صفوف إلى عنصر التحكم DataGridView في التعليمات البرمجية و ex3.cs في ملف الأمثلة يحتوي على هذا الرمز. بدءاً بإضافة مربع TextEdit و ComboBox وزر إلى النموذج مع DataGridView عليه. قم بتعيين الخاصية DataGridView AllowUserto AddRows إلى false. يمكنني استخدام التسميات كذلك ودعا cbAges combobox ، زر btnAddRow و TextBox tbName. لقد قمت أيضًا بإضافة زر "إغلاق" للنموذج وانقر فوقه نقرًا مزدوجًا لإنشاء هيكل حدث معالج btnClose_Click. إضافة كلمة إغلاق () هناك يجعل هذا العمل.

بشكل افتراضي ، يتم تعيين الخاصية تمكين الزر "إضافة صف" على "خطأ" في البداية. لا نريد إضافة أي صفوف إلى DataGridView ما لم يكن هناك نص في كل من مربع TextEdit Name و ComboBox. قمت بإنشاء الأسلوب CheckAddButton ثم قمت بإنشاء معالج أحداث "ترك" لمربع تحرير "نص الاسم" بالنقر المزدوج بجوار الكلمة "ترك في الخصائص" عندما كان يعرض الأحداث. يعرض مربع الخصائص هذا في الصورة أعلاه. بشكل افتراضي ، يعرض مربع الخصائص الخصائص ولكن يمكنك رؤية معالجات الأحداث من خلال النقر على زر البرق.

باطل خاص CheckAddButton ()
{
btnAddRow.Enabled = (tbName.Text.Length> 0 && cbAges.Text.Length> 0)؛
}

يمكنك استخدام الحدث TextChanged بدلاً من ذلك ، على الرغم من أن هذا سوف يستدعي أسلوب CheckAddButton () لكل ضغطة مفتاح بدلاً من عندما يتم ترك عنصر التحكم teh ، أي عندما يكتسب عنصر تحكم آخر التركيز. على Ages Combo ، استخدمت الحدث TextChanged ، لكني حددت معالج الأحداث tbName_Leave بدلاً من النقر المزدوج لإنشاء معالج حدث جديد.

ليست كل الأحداث متوافقة لأن بعض الأحداث توفر معلمات إضافية ولكن إذا كنت تستطيع رؤية معالج تم إنشاؤه مسبقًا ، فيمكنك نعم استخدامه. إنها في الغالب مسألة تفضيل ، حيث يمكنك الحصول على معالج أحداث منفصل لكل عنصر تحكم تستخدمه أو تشارك معالجات الأحداث (كما فعلت) عندما يكون لديهم توقيع حدث مشترك ، أي أن المعلمات هي نفسها.

قمت بإعادة تسمية مكون DataGridView إلى dGView لإيجاز وانقر نقرًا مزدوجًا فوق AddRow لإنشاء هيكل عظمي معالج حدث. يضيف هذا الرمز التالي صفًا فارغًا جديدًا ، ويحصل على فهرس الصفوف (إنه RowCount-1 لأنه تمت إضافته للتو و RowCount يستند إلى 0) ، ثم يصل إلى ذلك الصف عبر فهرسه ويعيّن القيم الموجودة في الخلايا الموجودة في هذا الصف على الأعمدة اسمك والعمر.

dGView.Rows.Add ()؛
int RowIndex = dGView.RowCount - 1؛
DataGridViewRow R = dGView.RowsRowIndex؛
R.Cells "YourName" .Value = tbName.Text؛
R.Cells "العمر" .Value = cbAges.Text؛

في الصفحة التالية: ضوابط الحاويات

07 من 10

استخدام الحاويات مع الضوابط

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

الحاوية هي أي من عناصر التحكم التي يمكن أن تحتوي على عناصر تحكم أخرى. تتضمن تلك الموجودة في Toolbox اللوحة و FlowLayoutpanel و SplitContainer و TabControl و TableLayoutPanel. إذا لم تتمكن من رؤية مربع الأدوات ، فاستخدم القائمة "عرض" وستجده. تحتفظ الحاويات بعناصر التحكم مع بعضها ، وإذا قمت بنقل الحاوية أو تغيير حجمها ، فسيؤثر ذلك على موضع عناصر التحكم. ما عليك سوى نقل عناصر التحكم الموجودة في الحاوية في "مصمم النموذج" ، وسوف تتعرف على أن الحاوية أصبحت الآن مسؤولة.

لوحات و GroupBoxes

تشبه لوحة GroupBox ولكن لا يمكن لـ GroupBox التمرير ولكن يمكنه عرض تسمية توضيحية وله حد افتراضي. يمكن أن يكون للألواح حدود ولكن بشكل افتراضي لا. أستخدم GroupBoxes لأنها تبدو أجمل وهذا مهم بسبب:

  • قانون بولتون - يقيم المستخدمون عادةً برامج لطيفة المظهر مع أخطاء أعلى من البرامج ذات المظهر العادي دون أخطاء!

تعتبر الألواح في متناول اليد لتجميع حاويات أيضًا ، لذلك قد يكون لديك صندوقين أو أكثر من GroupBoxes على لوحة.

تفضل بقشيش للعمل مع الحاويات. إسقاط حاوية انقسام في نموذج. انقر فوق اللوحة اليمنى ثم اللوحة اليمنى. الآن حاول إزالة SplitContainer من النموذج. يكون الأمر صعبًا حتى تنقر بزر الماوس الأيمن على إحدى اللوحات ، ثم انقر فوق تحديد SplitContainer1. بمجرد تحديد كل شيء ، يمكنك حذفه. هناك طريقة أخرى تنطبق على جميع الضوابط والحاويات ضرب مفتاح Esc لتحديد الوالد.

يمكن للحاويات عش داخل بعضها البعض كذلك. فقط اسحب واحدة صغيرة أعلى واحدة أكبر وسترى خطًا عموديًا رفيعًا يظهر لفترة وجيزة لإظهار أن أحدهما الآن داخل الآخر. عند سحب الحاوية الأصل ، يتم نقل الطفل معها. مثال 5 يوضح هذا. بشكل افتراضي ، لا تكون اللوحة ذات اللون البني الفاتح داخل الحاوية ، لذا عند النقر فوق زر النقل ، يتم نقل GroupBox لكن اللوحة ليست كذلك. الآن اسحب اللوحة إلى GroupBox بحيث تكون داخل Groupbox تمامًا. عندما تقوم بترجمة وتشغيل هذا الوقت ، فإن النقر فوق الزر "تحريك" يتحرك معًا.

في الصفحة التالية: باستخدام TableLayoutPanels

08 من 10

باستخدام TableLayoutPanels

و TableLayoutpanel هو حاوية مثيرة للاهتمام. إنها بنية جدول منظمة مثل شبكة ثنائية الأبعاد من الخلايا حيث تحتوي كل خلية على عنصر تحكم واحد فقط. لا يمكن أن يكون لديك أكثر من عنصر تحكم واحد في الخلية. يمكنك تحديد كيفية نمو الجدول عند إضافة المزيد من عناصر التحكم أو حتى في حالة عدم نموه ، يبدو أنه تم تصميمه على جدول HTML لأن الخلايا يمكن أن تمتد إلى أعمدة أو صفوف. حتى سلوك تثبيت عناصر التحكم الفرعية في الحاوية يعتمد على إعدادات الهامش والحشو. سنرى المزيد عن نقاط الارتساء في الصفحة التالية.

في المثال Ex6.cs ، لقد بدأت باستخدام جدول "عمودين" أساسي وحددت من خلال مربع الحوار "أنماط التحكم والصف" (حدد عنصر التحكم وانقر فوق مثلث التأشير الأيمن الصغير الموجود بالقرب من أعلى اليمين لرؤية قائمة بالمهام وانقر آخر واحد) أن العمود الأيسر هو 40 ٪ والعمود الأيمن 60 ٪ من العرض. يتيح لك تحديد عرض الأعمدة بعبارات بيكسل مطلقة ، أو بالنسبة المئوية أو يمكنك السماح لها بالحجم التلقائي. هناك طريقة أسرع للوصول إلى مربع الحوار هذا هو مجرد النقر فوق "المجموعة" بجوار الأعمدة في "نافذة الخصائص".

لقد أضفت زر AddRow وتركت خاصية GrowStyle بقيمة AddRows الافتراضية الخاصة بها. عندما يصبح الجدول ممتلئًا ، يضيف صفًا آخر. بدلاً من ذلك ، يمكنك تعيين قيمها إلى AddColumns و FixedSize بحيث لا يمكن أن تنمو بعد الآن. في Ex6 ، عند النقر فوق الزر "إضافة عناصر تحكم" ، فإنه يستدعي الأسلوب AddLabel () ثلاث مرات و AddCheckBox () مرة واحدة. ينشئ كل أسلوب مثيل لعنصر التحكم ثم يستدعي tblPanel.Controls.Add () بعد إضافة عنصر التحكم الثاني ، تتسبب عناصر التحكم الثالثة في زيادة الجدول. تظهر الصورة بعد النقر فوق الزر "إضافة عنصر تحكم" مرة واحدة.

في حال كنت تتساءل من أين تأتي القيم الافتراضية في أساليب AddCheckbox () و AddLabel () التي أتصل بها ، فقد تمت إضافة عنصر التحكم يدويًا إلى الجدول في المصمم ، ثم تم نسخ رمز إنشائه وتهيئته من داخل هذه المنطقة. ستجد رمز التهيئة في استدعاء الأسلوب InitializeComponent بمجرد النقر فوق + إلى يسار المنطقة أدناه:

مصمم نموذج ويندوز ولدت رمز

في الصفحة التالية: بعض الخصائص المشتركة التي يجب أن تعرفها

09 من 10

خصائص التحكم المشتركة التي يجب أن تعرفها

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

المراسي aweigh

اعتمادًا على الاستخدام ، غالبًا ما يتم تغيير حجم بعض النماذج من قبل المستخدم. لا شيء يبدو أسوأ من تغيير حجم النموذج ورؤية عناصر التحكم في نفس الموقف. تحتوي جميع عناصر التحكم على نقاط ربط تتيح لك "إرفاقها" بالحواف الأربعة بحيث يتحرك عنصر التحكم أو يمتد عند نقل حافة مرفقة. يؤدي هذا إلى السلوك التالي عندما يتم تمديد نموذج من الحافة اليمنى:

  1. السيطرة المرفقة إلى اليسار ولكن ليس صحيحا. - لا يتحرك أو يمتد (سيئ!)
  2. تحكم متصل بكل من الحواف اليسرى واليمنى. انها تمتد عندما يتم تمديد النموذج.
  3. السيطرة تعلق على الحافة اليمنى. يتحرك عندما يتم تمديد النموذج.

بالنسبة لأزرار مثل Close الموجودة في أسفل اليمين ، فإن السلوك 3 هو المطلوب. يكون ListViews و DataGridViews أفضل مع 2 إذا كان عدد الأعمدة يكفي لتجاوز النموذج ويحتاج إلى التمرير). المراسي الأعلى واليسار هي الافتراضية. تتضمن نافذة الخاصية محررًا صغيرًا أنيقًا يشبه علم إنجلترا. ما عليك سوى النقر فوق أي من الأشرطة (اثنان أفقيًا وعموديًا) لتعيين أو إلغاء الربط المناسب ، كما هو موضح في الصورة أعلاه.

وضع علامات على طول

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

لقد استخدمت Tag للاحتفاظ بكائن كامل مع إظهار عدد قليل فقط من خصائصه في ListView. على سبيل المثال ، قد ترغب فقط في إظهار اسم العميل ورقمه في قائمة ملخص العميل. ولكن انقر بزر الماوس الأيمن فوق العميل المحدد ، ثم افتح نموذجًا به جميع تفاصيل العميل. يكون ذلك سهلاً إذا قمت بإنشاء قائمة العملاء من خلال قراءة جميع تفاصيل العميل في الذاكرة وتعيين مرجع لكائن فئة العميل في العلامة. جميع الضوابط لها علامة.

في الصفحة التالية:

كيفية العمل مع TabControls

10 من 10

العمل مع TabTabControls

TabControl هو وسيلة سهلة لتوفير مساحة النموذج من خلال وجود علامات تبويب متعددة. يمكن أن تحتوي كل علامة تبويب على رمز أو نص ويمكنك تحديد أي علامة تبويب وعرض عناصر التحكم الخاصة بها. TabControl عبارة عن حاوية ولكنها تحتوي فقط على TabPages. كل TabPage هو أيضًا حاوية يمكن إضافة عناصر تحكم عادية إليها.

في x7.cs على سبيل المثال ، لقد قمت بإنشاء لوحة صفحة علامتي تبويب مع أول علامة تبويب تسمى عناصر التحكم التي تحتوي على ثلاثة أزرار وخانة اختيار عليها. تتم تسمية صفحة علامة التبويب الثانية "السجلات" وتستخدم لعرض كافة الإجراءات المسجلة والتي تتضمن النقر فوق زر أو تبديل خانة الاختيار. يتم استدعاء طريقة تسمى Log () لتسجيل كل نقرة زر وما إلى ذلك. وتضيف السلسلة المتوفرة إلى ListBox.

لقد أضفت أيضًا عنصري القوائم المنبثقة في النقر بزر الماوس الأيمن إلى TabControl بالطريقة المعتادة. أولاً أضف ContextMenuStrip إلى النموذج وتعيينه في الخاصية ContextStripMenu TabControl. خيارا القائمة هما إضافة صفحة جديدة وإزالة هذه الصفحة. ومع ذلك قمت بتقييد إزالة الصفحة بحيث يمكن إزالة صفحات علامة التبويب المضافة حديثًا فقط وليس صفحتين أصليتين.

إضافة صفحة علامة تبويب جديدة

هذا أمر سهل ، ما عليك سوى إنشاء صفحة علامة تبويب جديدة ، ومنحها تعليقًا نصيًا على علامة التبويب ، ثم إضافتها إلى مجموعة علامات الجدولة في علامة تبويب علامات التبويب

TabPage newPage = new TabPage ()؛
newPage.Text = "صفحة جديدة" ؛
Tabs.TabPages.Add (NEWPAGE)؛

في رمز ex7.cs ، قمت أيضًا بإنشاء تسمية وأضفتها إلى TabPage. تم الحصول على الكود عن طريق إضافته في مصمم النموذج لإنشاء الكود ثم نسخه.

إن إزالة صفحة ما هي إلا مسألة استدعاء TabPages.RemoveAt () ، وذلك باستخدام Tabs.SelectedIndex للحصول على علامة التبويب المحددة حاليًا.

استنتاج

في هذا البرنامج التعليمي ، رأينا كيف تعمل بعض عناصر التحكم الأكثر تطوراً وكيفية استخدامها. في البرنامج التعليمي التالي ، سأستمر في استخدام سمة واجهة المستخدم الرسومية وإلقاء نظرة على مؤشر ترابط عامل الخلفية وإظهار كيفية استخدامها.