Προγραμματισμός Προηγμένων Winforms σε C #

click fraud protection

Σε αυτό το σεμινάριο προγραμματισμού C #, θα επικεντρωθώ στους προηγμένους ελέγχους όπως ComboBoxes, Grids και ListViews και θα σας δείξω τον τρόπο με τον οποίο θα τα χρησιμοποιήσετε πιθανότατα. Δεν αγγίζω δεδομένα και δεσμεύω μέχρι αργότερα ένα σεμινάριο. Ας ξεκινήσουμε με ένα απλό έλεγχο, ένα ComboBox.

Στην καρδιά ενός Combo είναι μια συλλογή αντικειμένων και ο απλούστερος τρόπος για να συμπληρώσετε αυτό είναι να ρίξετε ένα combo στην οθόνη, επιλέξτε ιδιότητες (αν δεν μπορείτε να δείτε τα παράθυρα ιδιοτήτων, κάντε κλικ στην επιλογή Προβολή στο επάνω μέρος του μενού και, στη συνέχεια, στο παράθυρο ιδιοτήτων), βρείτε αντικείμενα και κάντε κλικ στις ελλείψεις κουμπί. Στη συνέχεια, μπορείτε να πληκτρολογήσετε τις συμβολοσειρές, να μεταγλωττίσετε το πρόγραμμα και να τραβήξετε το combo προς τα κάτω για να δείτε τις επιλογές.

Τώρα σταματήστε το πρόγραμμα και προσθέστε μερικούς περισσότερους αριθμούς: τέσσερις, πέντε.. έως δέκα. Όταν το εκτελείτε, θα δείτε μόνο 8, επειδή αυτή είναι η προεπιλεγμένη τιμή των MaxDropDownItems. Νιώστε ελεύθερος να το ορίσετε σε 20 ή 3 και στη συνέχεια να το εκτελέσετε για να δείτε τι κάνει.

instagram viewer

Είναι ενοχλητικό ότι όταν ανοίγει λέει comboBox1 και μπορείτε να το επεξεργαστείτε. Αυτό δεν θέλουμε. Βρείτε την ιδιότητα DropDownStyle και αλλάξτε το DropDown στο DropDownList. (Είναι ένα Combo!). Τώρα δεν υπάρχει κείμενο και δεν είναι επεξεργάσιμο. Μπορείτε να επιλέξετε έναν από τους αριθμούς αλλά πάντα ανοίγει κενό. Πώς επιλέγουμε έναν αριθμό για να ξεκινήσουμε; Καλά δεν είναι ιδιοκτησία που μπορείτε να ορίσετε κατά το σχεδιασμό, αλλά η προσθήκη αυτής της γραμμής θα το κάνει αυτό.

Προσθέστε αυτήν τη γραμμή στον κατασκευαστή Form1 (). Πρέπει να δείτε τον κώδικα για τη φόρμα (στην Εξερεύνηση Solution, κάντε δεξί κλικ στο From1.cs και κάντε κλικ στην επιλογή Προβολή κωδικού. Εύρεση αρχικοποίησηςComponent (); και προσθέστε αυτή τη γραμμή αμέσως μετά από αυτό.

Εάν ορίσετε την ιδιότητα DropDownStyle για το combo σε Simple και εκτελέσετε το πρόγραμμα, δεν θα λάβετε τίποτα. Δεν θα επιλέξει ή δεν θα κάνει κλικ ή θα απαντήσει. Γιατί; Επειδή κατά το σχεδιασμό πρέπει να τραβήξετε την κάτω λαβή τάνυσης και να κάνετε όλο τον έλεγχο πιο ψηλό.

Στο παράδειγμα 2, έχω μετονομάσει το ComboBox σε combo, άλλαξε το combo DropDownStyle πίσω στο DropDown ώστε να μπορεί να επεξεργαστεί και να προσθέσει ένα κουμπί Add που ονομάζεται btnAdd. Έχω κάνει διπλό κλικ στο κουμπί προσθήκης για να δημιουργήσετε ένα πρόγραμμα χειρισμού συμβάντων btnAdd_Click () και να προσθέσετε αυτή τη γραμμή συμβάντος.

Τώρα, όταν εκτελείτε το πρόγραμμα, πληκτρολογήστε έναν νέο αριθμό, πείτε Eleven και κάντε κλικ στο add. Ο διαχειριστής συμβάντων παίρνει το κείμενο που πληκτρολογήσατε (σε σύνθετο. Text) και την προσθέτει στη συλλογή στοιχείων του Combo. Κάντε κλικ στο Combo και τώρα έχουμε μια νέα καταχώρηση έντεκα. Έτσι προσθέτετε μια νέα συμβολοσειρά σε ένα Combo. Για να καταργήσετε ένα είναι λίγο πιο περίπλοκο καθώς θα πρέπει να βρείτε το ευρετήριο της συμβολοσειράς που θέλετε να αφαιρέσετε, στη συνέχεια αφαιρέστε το. Η μέθοδος RemoveAt που φαίνεται παρακάτω είναι μια μέθοδος συλλογής για να γίνει αυτό. πρέπει απλώς να καθορίσετε ποιο στοιχείο στην παράμετρο Removeindex.

θα αφαιρέσει τη συμβολοσειρά στη θέση RemoveIndex. Εάν υπάρχουν n στοιχεία στο combo τότε οι έγκυρες τιμές είναι 0 έως n-1. Για 10 αντικείμενα, τιμές 0..9.

Εάν αυτό δεν εντοπίσει το κείμενο που επιστρέφει -1 διαφορετικά επιστρέφει το δείκτη 0 της σειράς που βασίζεται στη συνθετική λίστα. Υπάρχει επίσης μια υπερφορτωμένη μέθοδος του FindStringExact που σας επιτρέπει να καθορίσετε από πού ξεκινάτε την αναζήτηση, ώστε να μπορείτε να παραλείψετε την πρώτη κλπ. Αν έχετε διπλότυπα. Αυτό θα μπορούσε να είναι βολικό για την αφαίρεση των διπλότυπων σε μια λίστα.

Κάνοντας κλικ στο btnAddMany_Click () διαγράφει το κείμενο από το combo και στη συνέχεια διαγράφει τα περιεχόμενα της συλλογής στοιχείων combo και έπειτα το combo. AddRange (για να προσθέσετε τις χορδές από τον πίνακα τιμών. Αφού το κάνετε αυτό, ορίζει το SelectedIndex του combo σε 0. Αυτό δείχνει το πρώτο στοιχείο στο combo. Εάν κάνετε προσθήκη ή διαγραφή στοιχείων σε ένα ComboBox τότε είναι καλύτερο να παρακολουθείτε ποιο στοιχείο είναι επιλεγμένο. Η ρύθμιση SelectedIndex σε -1 αποκρύπτει τα επιλεγμένα στοιχεία.

Το κουμπί Προσθήκη Lots διαγράφει τη λίστα και προσθέτει 10.000 αριθμούς. Έχω προσθέσει combo. BeginUpdate () και combo, EndUpdate () κλήσεις γύρω από τον βρόχο για να αποτρέψετε τυχόν τρεμόπαιγμα από τα Windows προσπαθώντας να ενημερώσετε τον έλεγχο. Στο τρίχρονο μου υπολογιστή χρειάζομαι λίγο περισσότερο από ένα δευτερόλεπτο για να προσθέσω 100.000 αριθμούς στο combo.

Αυτός είναι ένας εύχρηστος έλεγχος για την εμφάνιση πίνακα δεδομένων χωρίς την πολυπλοκότητα ενός δικτύου. Μπορείτε να εμφανίσετε τα στοιχεία ως μεγάλα ή μικρά εικονίδια, όπως μια λίστα εικονιδίων σε μια κάθετη λίστα ή πιο χρήσιμα ως λίστα στοιχείων και υποσυνόλων σε ένα πλέγμα και αυτό είναι που θα κάνουμε εδώ.

Αφού αφαιρέσετε ένα ListView σε μια φόρμα, κάντε κλικ στην ιδιότητα columns και προσθέστε 4 στήλες. Αυτά θα είναι TownName, X, Y και Pop. Ορίστε το κείμενο για κάθε ColumnHeader. Εάν δεν μπορείτε να δείτε τις επικεφαλίδες στο ListView (αφού προσθέσετε και τις 4), ορίστε την ιδιότητα Προβολή του ListView σε Λεπτομέρειες. Αν δείτε τον κώδικα για αυτό το παράδειγμα, μεταβείτε στην περιοχή όπου αναγράφεται ο κώδικας Windows Form Designer και αναπτύξτε την περιοχή που βλέπετε τον κώδικα που δημιουργεί το ListView. Είναι χρήσιμο να δείτε πώς λειτουργεί το σύστημα και μπορείτε να αντιγράψετε αυτόν τον κώδικα και να το χρησιμοποιήσετε μόνοι σας.

Μπορείτε να ρυθμίσετε το πλάτος για κάθε στήλη χειροκίνητα μετακινώντας το δρομέα πάνω από την κεφαλίδα και σύροντάς το. Ή μπορείτε να το κάνετε στον κώδικα ορατό μετά την επέκταση της περιοχής σχεδιασμού φόρμας. Θα πρέπει να δείτε τον κώδικα ως εξής:

Για τη στήλη του πληθυσμού, οι αλλαγές στον κώδικα αντικατοπτρίζονται στον σχεδιαστή και αντίστροφα. Σημειώστε ότι ακόμη και αν ορίσετε την ιδιότητα Κλειδωμένο σε αληθινό, αυτό επηρεάζει μόνο τον σχεδιαστή και κατά την εκτέλεση χρόνου μπορείτε να αλλάξετε το μέγεθος των στηλών.

ListViews έρχονται επίσης με μια σειρά δυναμικών ιδιοτήτων. Κάντε κλικ στις (Δυναμικές ιδιότητες) και επιλέξτε την ιδιότητα που θέλετε. Όταν ορίσετε μια ιδιότητα να είναι δυναμική, δημιουργεί ένα αρχείο .config XML και το προσθέτει στον Explorer Solution.

Η πραγματοποίηση αλλαγών κατά το σχεδιασμό είναι ένα πράγμα, αλλά πραγματικά πρέπει να το κάνουμε όταν το πρόγραμμα εκτελείται. Ένα ListView αποτελείται από 0 ή περισσότερα στοιχεία. Κάθε στοιχείο (ένα ListViewItem) έχει μια ιδιότητα κειμένου και μια συλλογή SubItems. Η πρώτη στήλη εμφανίζει το κείμενο του στοιχείου, στην επόμενη στήλη εμφανίζεται το SubItem [0] .text και το SubItem [1] .text και ούτω καθεξής.

Έχω προσθέσει ένα κουμπί για να προσθέσετε μια σειρά και ένα πλαίσιο επεξεργασίας για το όνομα της πόλης. Καταχωρίστε οποιοδήποτε όνομα στο πλαίσιο και κάντε κλικ στην επιλογή Προσθήκη γραμμής. Αυτό προσθέτει μια νέα σειρά στο ListView με το όνομα της πόλης που τίθεται στην πρώτη στήλη και τις επόμενες τρεις στήλες (SubItems [0..2]) συμπληρώνονται με τυχαίους αριθμούς (μετατρέπονται σε συμβολοσειρές) με την προσθήκη αυτών των συμβολοσειρών τους.

Τώρα ορίστε την ιδιότητα ListView Multiselect σε false. Θέλουμε μόνο να επιλέξουμε ένα στοιχείο κάθε φορά, αν και αν θέλετε να αφαιρέσετε περισσότερα από ένα βήμα, είναι παρόμοια, εκτός κι αν πρέπει να βγείτε προς τα πίσω. (Εάν βρεθείτε σε κανονική σειρά και διαγράψετε στοιχεία, τότε τα επόμενα στοιχεία δεν είναι συγχρονισμένα με τα επιλεγμένα ευρετήρια).

Το μενού δεξιού κλικ δεν λειτουργεί ακόμα, καθώς δεν έχουμε στοιχεία μενού για εμφάνιση. Έτσι κάντε δεξί κλικ στο PopupMenu (κάτω από τη φόρμα) και θα δείτε το Μενού Context να εμφανίζεται στην κορυφή της φόρμας όπου εμφανίζεται ο κανονικός επεξεργαστής μενού. Κάντε κλικ σε αυτό και όπου λέει Πληκτρολογήστε εδώ, πληκτρολογήστε Κατάργηση στοιχείου. Το παράθυρο ιδιοτήτων θα εμφανίσει ένα MenuItem, ώστε μετονομάστε το ώστε να mniRemove. Κάντε διπλό κλικ σε αυτό το στοιχείο μενού και θα πρέπει να πάρετε τη λειτουργία κώδικα χειριστή συμβάντος menuItem1_Click. Προσθέστε αυτόν τον κώδικα έτσι ώστε να μοιάζει με αυτό.

Αν χάσετε το στοιχείο "Αφαίρεση", απλώς κάντε κλικ στον έλεγχο PopupMenu από μόνο του κάτω από τη φόρμα στη φόρμα "Designer". Αυτό θα το επαναφέρει στην οπτική γωνία.

Ωστόσο, εάν το εκτελέσετε και δεν προσθέσετε ένα στοιχείο και το επιλέξετε, όταν κάνετε δεξί κλικ και θα εμφανιστεί το μενού και κάντε κλικ στο στοιχείο Κατάργηση στοιχείου, θα γίνει εξαίρεση επειδή δεν υπάρχει επιλεγμένο στοιχείο. Αυτό είναι κακός προγραμματισμός, οπότε μπορείτε να το διορθώσετε. Κάντε διπλό κλικ στο αναδυόμενο συμβάν και προσθέστε αυτήν τη γραμμή κώδικα.

Ένα DataGridView είναι και το πιο πολύπλοκο και το πιο χρήσιμο στοιχείο που παρέχεται δωρεάν με C #. Λειτουργεί με τις δύο πηγές δεδομένων (δηλ. Δεδομένα από μια βάση δεδομένων) και χωρίς (δηλ. Δεδομένα που προσθέτετε προγραμματικά). Για το υπόλοιπο αυτού του σεμιναρίου θα δείξω τη χρήση του χωρίς πηγές δεδομένων, Για απλούστερες ανάγκες εμφάνισης μπορεί να βρείτε ένα απλό ListView πιο κατάλληλο.

Εάν έχετε χρησιμοποιήσει έναν παλαιότερο έλεγχο DataGrid, τότε αυτό είναι μόνο ένα από αυτά στα στεροειδή: σας δίνει περισσότερα ενσωματωμένα σε στήλες τύπους, μπορεί να λειτουργήσει με εσωτερικά και εξωτερικά δεδομένα, περισσότερη προσαρμογή της εμφάνισης (και γεγονότων) και δίνει μεγαλύτερο έλεγχο στον χειρισμό των κυττάρων με γραμμές κατάψυξης και στήλες.

Όταν σχεδιάζετε φόρμες με δεδομένα πλέγματος, είναι συνηθισμένο να καθορίσετε διαφορετικούς τύπους στηλών. Μπορεί να έχετε κουτιά επιλογής σε μια στήλη, ένα αναγνωρίσιμο ή επεξεργάσιμο κείμενο σε άλλο και αριθμούς μαθημάτων. Αυτοί οι τύποι στήλης είναι επίσης συνήθως ευθυγραμμισμένοι με διαφορετικούς αριθμούς, γενικά δεξιόστροφα ευθυγραμμισμένοι, έτσι ώστε τα δεκαδικά σημεία να ευθυγραμμίζονται. Στο επίπεδο της στήλης μπορείτε να επιλέξετε από Κουμπί, πλαίσιο ελέγχου, ComboBox, Εικόνα, Κείμενο και Σύνδεσμοι. αν αυτά δεν είναι αρκετά μπορείτε να αψηφήσετε τους δικούς σας προσαρμοσμένους τύπους.

Ο ευκολότερος τρόπος για να προσθέσετε στήλες είναι ο σχεδιασμός στο 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. Η προσθήκη της λέξης Κλείσιμο () κάνει αυτό να λειτουργεί.

Από προεπιλογή, η ιδιότητα ενεργοποίησης του κουμπιού "Προσθήκη γραμμής" έχει οριστεί ψευδής στην αρχή. Δεν θέλουμε να προσθέσουμε γραμμές στο DataGridView εκτός αν υπάρχει κείμενο στο πλαίσιο Name TextEdit και το ComboBox. Δημιούργησα τη μέθοδο CheckAddButton και έπειτα δημιούργησα ένα πρόγραμμα χειρισμού συμβάντος αδείας για το πλαίσιο επεξεργασίας κειμένου ονόματος, κάνοντας διπλό κλικ δίπλα στη λέξη Αφήστε στα Properties όταν εμφανίζει τα συμβάντα. Το πλαίσιο Ιδιότητες δείχνει αυτό στην παραπάνω εικόνα. Από προεπιλογή, το πλαίσιο Ιδιότητες εμφανίζει ιδιότητες, αλλά μπορείτε να δείτε χειριστές συμβάντων κάνοντας κλικ στο κουμπί αστραπής.

Θα μπορούσατε να χρησιμοποιήσετε το συμβάν TextChanged αντί, αν και αυτό θα καλέσει το CheckAddButton () για κάθε πάτημα πλήκτρων και όχι όταν ο έλεγχος ξετυλίγεται δηλ. όταν αποκτηθεί ένας άλλος έλεγχος Συγκεντρώνω. Στο Ages Combo χρησιμοποίησα το συμβάν TextChanged αλλά επέλεξα το πρόγραμμα χειρισμού συμβάντων tbName_Leave αντί για doubleclicking για να δημιουργήσω ένα νέο διαχειριστή συμβάντων.

Δεν είναι όλα τα συμβάντα συμβατά επειδή ορισμένα συμβάντα παρέχουν επιπλέον παραμέτρους, αλλά αν μπορείτε να δείτε ένα χειριστή που δημιουργήθηκε προηγουμένως τότε ναι μπορείτε να το χρησιμοποιήσετε. Είναι ως επί το πλείστον θέμα προτίμησης, μπορείτε να έχετε έναν ξεχωριστό χειριστή συμβάντων για κάθε έλεγχο που είστε χρησιμοποιώντας ή να μοιράζονται χειριστές συμβάντων (όπως έκανα) όταν έχουν μια κοινή υπογραφή γεγονότος, δηλ. οι παράμετροι είναι οι ίδιο.

Μετονομάσαμε το στοιχείο DataGridView στο dGView για συντομία και κάναμε διπλό κλικ στο AddRow για να δημιουργήσουμε ένα σκελετό χειριστή συμβάντος. Αυτός ο παρακάτω κώδικας προσθέτει μια νέα κενή γραμμή, αποκτά το ευρετήριο γραμμών (είναι RowCount-1 καθώς έχει μόλις προστεθεί και το RowCount είναι 0 βασίζεται) και στη συνέχεια αποκτά πρόσβαση σε αυτή τη σειρά μέσω του ευρετηρίου της και ορίζει τις τιμές στα κελιά αυτής της σειράς για τις στήλες YourName και Ηλικία.

Κατά το σχεδιασμό μιας φόρμας, θα πρέπει να σκεφτείτε από άποψη δοχείων και ελέγχων και ποιες ομάδες ελέγχου θα πρέπει να διατηρούνται μαζί. Στις Δυτικές κουλτούρες οπωσδήποτε, οι άνθρωποι που διαβάζουν από την Αρχή Αριστερά στην Κάτω Δεξιά καθιστούν ευκολότερη την ανάγνωση αυτού του τρόπου.

Ένα δοχείο είναι οποιοδήποτε από τα στοιχεία ελέγχου που μπορεί να περιέχει άλλα στοιχεία ελέγχου. Εκείνοι που βρίσκονται στην Εργαλειοθήκη περιλαμβάνουν τα πάνελ, FlowLayoutpanel, SplitContainer, TabControl και TableLayoutPanel. Αν δεν μπορείτε να δείτε την εργαλειοθήκη, χρησιμοποιήστε το μενού Προβολή και θα το βρείτε. Τα δοχεία συγκρατούν τα χειριστήρια μαζί και αν μετακινήσετε ή αλλάξετε το μέγεθος του δοχείου θα επηρεάσει τη θέση των χειριστηρίων. Απλά μετακινήστε τα στοιχεία ελέγχου πάνω από το δοχείο στον Σχεδιαστή Φόρμας και θα αναγνωρίσει ότι το Container είναι τώρα υπεύθυνο.

Ένας πίνακας είναι παρόμοιος με ένα GroupBox αλλά ένα GroupBox δεν μπορεί να μετακινηθεί αλλά μπορεί να εμφανίσει μια λεζάντα και έχει προεπιλεγμένα σύνορα. Τα πάνελ μπορούν να έχουν σύνορα αλλά από προεπιλογή όχι. Χρησιμοποιώ GroupBoxes επειδή φαίνονται καλύτερο και αυτό είναι σημαντικό γιατί:

Τα πάνελ είναι χρήσιμα για την ομαδοποίηση δοχείων, επομένως μπορείτε να έχετε δύο ή περισσότερα GroupBoxes σε έναν πίνακα.

Εδώ είναι μια συμβουλή για την εργασία με δοχεία. Καταργήστε ένα διαχωρισμένο δοχείο σε μια φόρμα. Κάντε κλικ στον αριστερό πίνακα και στη δεξιά πλευρά. Τώρα δοκιμάστε να αφαιρέσετε το SplitContainer από τη φόρμα. Είναι δύσκολο μέχρι να κάνετε δεξί κλικ σε ένα από τα πλαίσια και, στη συνέχεια, κάντε κλικ στην επιλογή Select SplitContainer1. Αφού είναι όλα επιλεγμένα μπορείτε να τα διαγράψετε. Ένας άλλος τρόπος που ισχύει για όλους τους ελέγχους και τα δοχεία είναι πατήστε το πλήκτρο Esc για να επιλέξετε τον γονέα.

Τα δοχεία μπορούν να φωλιάζουν και το ένα μέσα στο άλλο. Απλά σύρετε ένα μικρό πάνω από ένα μεγαλύτερο και θα δείτε μια λεπτή κατακόρυφη γραμμή να φαίνεται σύντομα να δείχνει ότι κάποιος είναι τώρα μέσα στο άλλο. Όταν σύρετε το γονικό κοντέινερ, το παιδί μετακινείται μαζί του. Το παράδειγμα 5 δείχνει αυτό. Από προεπιλογή, ο ανοικτός καφέ πίνακας δεν είναι μέσα στο δοχείο, οπότε όταν κάνετε κλικ στο κουμπί μετακίνησης, το GroupBox μετακινείται αλλά ο πίνακας δεν είναι. Τώρα σύρετε το πάνελ πάνω από το GroupBox έτσι ώστε να είναι εντελώς μέσα στο Groupbox. Όταν μεταγλωττίζετε και εκτελείτε αυτή τη φορά, κάνοντας κλικ στο κουμπί Μετακίνηση κινείται και τα δύο μαζί.

Ένα TableLayoutpanel είναι ένα ενδιαφέρον δοχείο. Είναι μια δομή πίνακα που οργανώνεται σαν ένα πλέγμα 2D κυττάρων όπου κάθε κελί περιέχει μόνο ένα έλεγχο. Δεν μπορείτε να έχετε περισσότερους από έναν ελέγχους σε ένα κελί. Μπορείτε να καθορίσετε τον τρόπο με τον οποίο αυξάνεται ο πίνακας όταν προστίθενται περισσότερα στοιχεία ελέγχου ή ακόμα και αν δεν αυξάνεται. Φαίνεται ότι έχει διαμορφωθεί σε έναν πίνακα HTML επειδή τα κελιά μπορούν να καλύπτουν στήλες ή σειρές. Ακόμη και η συμπεριφορά αγκύρωσης των παιδικών μαρκών στο δοχείο εξαρτάται από τις ρυθμίσεις περιθωρίου και παρεμβύσματος. Θα δούμε περισσότερα σχετικά με τις άγκυρες στην επόμενη σελίδα.

Στο παράδειγμα Ex6.cs, έχω ξεκινήσει με ένα βασικό Δύο Στήλη Στήλης και καθορίζεται μέσω του πλαισίου διαλόγου Έλεγχος και Στυλ Σειράς (επιλέξτε τον έλεγχο και κάντε κλικ στο μικρό δεξιό τρίγωνο που βρίσκεται κοντά στην πάνω δεξιά γωνία για να δείτε μια λίστα εργασιών και κάντε κλικ στο τελευταίο) ότι η αριστερή στήλη είναι 40% και η δεξιά στήλη 60% πλάτος. Σας επιτρέπει να καθορίσετε τα πλάτη των κολώνων σε απόλυτους όρους pixel, σε ποσοστό ή μπορείτε απλά να το αφήσετε αυτόματα. Ένας πιο γρήγορος τρόπος για να φτάσετε σε αυτό το παράθυρο διαλόγου είναι να κάνετε κλικ στην επιλογή Συλλογή δίπλα στις στήλες στο παράθυρο Ιδιότητες.

Έχω προσθέσει ένα κουμπί AddRow και άφησα την ιδιότητα GrowStyle με την προεπιλεγμένη τιμή AddRows. Όταν γεμίσει ο πίνακας, προσθέτει μια άλλη σειρά. Εναλλακτικά, μπορείτε να ορίσετε τις τιμές του σε AddColumns και FixedSize, ώστε να μην μπορεί να αυξηθεί πια. Στην Ex6, όταν κάνετε κλικ στο κουμπί Add Controls, ονομάζεται μία φορά η μέθοδος AddLabel () τρεις φορές και το AddCheckBox (). Κάθε μέθοδος δημιουργεί μια εμφάνιση του ελέγχου και στη συνέχεια καλεί tblPanel. Έλεγχοι. Add () Μετά την προσθήκη του 2ου ελέγχου, τα τρίτα στοιχεία ελέγχου αυξάνουν τον πίνακα. Η εικόνα δείχνει ότι μετά το κλικ του κουμπιού Add Control έχει γίνει κλικ μία φορά.

Σε περίπτωση που αναρωτιέστε πού προέρχονται οι προεπιλεγμένες τιμές στις μεθόδους AddCheckbox () και AddLabel () που καλώ, ο έλεγχος ήταν αρχικά προστέθηκε με το χέρι στον πίνακα στο σχεδιαστή και έπειτα ο κώδικας για να το δημιουργήσει και να αρχικοποιηθεί αυτό αντιγράφηκε από μέσα σε αυτό περιοχή. Θα βρείτε τον κωδικό προετοιμασίας στην κλήση μεθόδου InitializeComponent αφού κάνετε κλικ στο + στα αριστερά της περιοχής παρακάτω:

Μπορείτε να επιλέξετε ταυτόχρονα πολλά στοιχεία ελέγχου κρατώντας πατημένο το πλήκτρο shift όταν επιλέγετε το δεύτερο και τα επόμενα χειριστήρια, ακόμα και τα χειριστήρια διαφορετικών τύπων. Το παράθυρο Ιδιότητες εμφανίζει μόνο εκείνες τις κοινές και στις δύο ιδιότητες, ώστε να μπορείτε να τις ορίσετε στο ίδιο μέγεθος, σε πεδία χρωμάτων και κειμένου, κλπ. Ακόμη και οι ίδιοι χειριστές συμβάντων μπορούν να αντιστοιχιστούν σε πολλαπλά χειριστήρια.

Ανάλογα με τη χρήση, ορισμένες μορφές θα καταλήγουν συχνά να αλλάζουν μέγεθος από το χρήστη. Τίποτα δεν φαίνεται χειρότερο από την αλλαγή μεγέθους μιας φόρμας και βλέποντας τους ελέγχους να παραμένουν στην ίδια θέση. Όλα τα χειριστήρια διαθέτουν άγκυρες που σας επιτρέπουν να τις προσαρτήσετε στις 4 άκρες έτσι ώστε ο έλεγχος να κινείται ή να τεντώνεται όταν μετακινείται μια συνδεδεμένη άκρη. Αυτό οδηγεί στην ακόλουθη συμπεριφορά όταν μια φόρμα εκτείνεται από τη δεξιά άκρη:

Για κουμπιά όπως το κλείσιμο που είναι παραδοσιακά στο κάτω δεξιά, η συμπεριφορά 3 είναι αυτό που χρειάζεται. ListViews και DataGridViews είναι καλύτερα με 2 εάν ο αριθμός των στηλών είναι αρκετός για να υπερχειλίσει τη φόρμα και χρειάζεται κύλιση). Οι προεπιλεγμένες άκρες κορυφής και αριστερά είναι οι εξής: Το παράθυρο ιδιοτήτων περιλαμβάνει έναν όμορφο επεξεργαστή που μοιάζει με την σημαία της Αγγλίας. Απλά κάντε κλικ σε οποιαδήποτε από τις ράβδους (δύο οριζόντια και δύο κάθετες) για να ρυθμίσετε ή να αφαιρέσετε την κατάλληλη άγκυρα, όπως φαίνεται στην παραπάνω εικόνα.

Μια ιδιοκτησία που δεν έχει μεγάλη σημασία είναι η ιδιότητα Tag και όμως μπορεί να είναι εξαιρετικά χρήσιμη. Στο παράθυρο Ιδιότητες μπορείτε να αντιστοιχίσετε μόνο κείμενο, αλλά στον κώδικα σας μπορείτε να έχετε οποιαδήποτε τιμή που κατεβαίνει από το αντικείμενο.

Έχω χρησιμοποιήσει την Ετικέτα για να κρατήσω ένα ολόκληρο αντικείμενο ενώ παρουσιάζω μόνο μερικές από τις ιδιότητές του σε ένα ListView. Για παράδειγμα, μπορεί να θέλετε να εμφανίσετε μόνο ένα όνομα και αριθμό πελάτη σε μια λίστα Πελατών Περίληψη. Αλλά κάντε δεξί κλικ στον επιλεγμένο πελάτη και στη συνέχεια ανοίξτε μια φόρμα με όλες τις λεπτομέρειες του πελάτη. Αυτό είναι εύκολο αν κατά τη δημιουργία της λίστας πελατών διαβάστε όλες τις λεπτομέρειες του πελάτη στη μνήμη και αναθέτοντας μια αναφορά στο αντικείμενο κλάσης πελάτη στην ετικέτα. Όλα τα στοιχεία ελέγχου έχουν μια ετικέτα.

Ένα TabControl είναι ένας εύχρηστος τρόπος για να αποθηκεύσετε το χώρο φόρμας έχοντας πολλαπλές καρτέλες. Κάθε καρτέλα μπορεί να έχει ένα εικονίδιο ή κείμενο και μπορείτε να επιλέξετε οποιαδήποτε καρτέλα και να εμφανίσετε τα στοιχεία ελέγχου. Το TabControl είναι ένα κοντέινερ αλλά περιέχει μόνο TabPages. Κάθε TabPage είναι επίσης ένα δοχείο που μπορεί να έχει κανονικούς ελέγχους που προστίθενται σε αυτό.

Στο παράδειγμα x7.cs, δημιούργησα έναν πίνακα δύο καρτελών με την πρώτη καρτέλα που ονομάζεται Controls με τρία κουμπιά και ένα πλαίσιο ελέγχου σε αυτό. Η δεύτερη σελίδα καρτέλας φέρει την ένδειξη "Καταγραφές" και χρησιμοποιείται για την εμφάνιση όλων των καταγεγραμμένων ενεργειών που περιλαμβάνουν κλικ σε ένα κουμπί ή εναλλαγή ενός πλαισίου ελέγχου. Μια μέθοδος που ονομάζεται Log () καλείται να καταγράφει κάθε κλικ κλπ. Προσθέτει την παρεχόμενη συμβολοσειρά σε μια λίστα.

Έχω προσθέσει επίσης δύο στοιχεία μενού δεξιών κλικ μενού στο TabControl με τον συνήθη τρόπο. Πρώτα προσθέστε ένα ContextMenuStrip στη φόρμα και ρυθμίστε το στην ιδιότητα ContextStripMenu του TabControl. Οι δύο επιλογές μενού είναι Προσθήκη νέας σελίδας και Κατάργηση αυτής της σελίδας. Ωστόσο, έχω περιορίσει την κατάργηση σελίδας, ώστε να καταργηθούν μόνο οι σελίδες καρτελών που προστέθηκαν πρόσφατα και όχι οι δύο αρχικές.

Αυτό είναι εύκολο, απλά δημιουργήστε μια νέα σελίδα καρτέλας, δώστε της μια λεζάντα κειμένου για την καρτέλα και στη συνέχεια προσθέστε την στη συλλογή TabPages των καρτελών TabControl

Η κατάργηση μιας σελίδας είναι απλώς θέμα κλήσης καρτελών. RemoveAt (), χρησιμοποιώντας τις καρτέλες. SelectedIndex για να αποκτήσετε την τρέχουσα επιλεγμένη καρτέλα.

Σε αυτό το σεμινάριο έχουμε δει πώς λειτουργούν μερικοί από τους πιο εξελιγμένους ελέγχους και πώς να τις χρησιμοποιήσετε. Στο επόμενο σεμινάριο θα συνεχίσω με το θέμα GUI και θα εξετάσω το νήμα εργαζόμενου φόντου και θα δείξω πώς να το χρησιμοποιήσω.

instagram story viewer