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

click fraud protection

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

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

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

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

instagram viewer

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

instagram story viewer