Απλή εφαρμογή Windows Forms – γεννήτρια κωδικών (συνέχεια)
Δείτε το πρώτο μέρος του άρθρου εδώ.
Το ζητούμενο είναι η εφαρμογή αυτή να είναι όσο πιο απλή γίνεται, με λίγα controls για τη χρήση του κυρίου προγράμματος και για τη σωστή και responsive αναπαράσταση των control στις θέσεις τους.
Κρατώντας την εφαρμογή όσο πιο απλή γίνεται είναι πιο εύκολο να αποφευχθούν bugs (λογικά λάθη και λάθη εξαιρέσεων) ενώ είναι εύκολο να διορθωθούν αν υπάρξουν.
Όταν ξεκινάει η εφαρμογή δημιουργείται η φόρμα
Κατα την δημιουργία:
- κάθε φόρμα πρέπει πρώτα να καλέσει μια μέθοδο της, την InitializeComponent – χωρίς αυτό δεν μπορεί να λειτουργήσει. Σε αυτή δημιουργούνται όλα τα controls (τα κουμπιά, οι περιοχές εισαγωγής κειμένων), τα οποία είναι και αυτά αντικείμενα.
- συσχετίζονται τα γεγονότα των κουμπιών και των κουτιών επιλογής με τις αντίστοιχες μεθόδους που τα χειρίζονται
- δημιουργείται ένα αντικείμενο τύπου
Kodikos
και παραμετροποιείται με κάποιες αρχικές παραμέτρους που δεν έχουν νόημα. - δημιουργούνται αντικείμενα τύπου DataBinding και προσθέτονται στα controls:
- (ckbLeksi (το κουτί για την επιλογή συλλαβίσιμου κωδικού)
- ckbIsopith (το κουτί επιλογής για την ισοπίθανη επιλογή χαρακτήρων))
Κάθε φορά που ο χρήστης πατάει το κουμπί, το πρόγραμμα παράγει έναν κωδικό σύφωνα με τις ρυθμίσεις, χρησιμοποιώντας το αντικείμενο Kodikos
. Όταν οι ρυθμίσεις αλλάζουν από τη φόρμα (τις αλλάζει ο χρήστης), το αντικείμενο αυτό επίσης ανανεώνεται και την επόμενη φορά που πατηθεί, θα παραχθεί κωδικός με τις καινούριες ρυθμίσεις.
Πως γίνεται η επιλογή αλφαριθμητικών
Η συνάρτηση Next -η λέξη Next είναι δεσμευμένη, είναι σε αγκύλες για να πάρει άλλο νόημα από τον compiler (αναγνωριστικό)- φροντίζει ο κωδικός που δημιουργείται να είναι του απαιτούμενου μήκους και να περιέχει τουλάχιστον ένα χαρακτήρα από κάθε ομάδα που επιλέχθηκε.
Δηλαδή αν επιλέχθηκε ο κωδικός να έχει νούμερα και μικρά γράμματα και το μήκος του να είναι 2, σίγουρα ο ένας χαρακτήρας θα είναι γράμμα και ο άλλος νούμερο.
Αν η επιλογή είναι να γίνει από μια ομάδα χαρακτήρων, όπως π.χ. όταν η επιλογή τυχαίων χαρακτήρων δεν έχει επιλεχθεί να είναι ισοπίθανη για κάθε ομάδα χαρακτήρων, απλά προσθέτονται τυχαίοι χαρακτήρες από αυτή την ομάδα (mikos).
Διαφορετικά, επειδή πρέπει να προστεθεί τουλάχιστον ένας χαρακτήρας από κάθε ομάδα, πρώτα προσθέτονται mikos – c ( όπου c ο αριθμός των ομάδων) χαρακτήρες, επιλέγοντας κάθε φορά τυχαία μια από τις ομάδες χαρακτήρων και μετά επιλέγοντας πάλι τυχαία έναν χαρακτήρα από αυτήν την ομάδα και τέλος για κάθε ομάδα επιλέγεται ένας χαρακτήρας τυχαία και τοποθετείται σε μια τυχαία θέση στον κωδικό.
Ο κώδικας της εφαρμογής
Public Function [Next]() As String KaneListOmadon() ' φτιάξε μια λίστα με τις ομάδες χαρακτήρων που επίλεξε ο χρήστης' If Me._mikos < Me.list_ansiRange.Count Then ' αν ο κωδικός πρέπει να έχει μήκος μικρότερο από το σύνολο των ομάδων χαρακτήρων, τουλάχιστον μια ομάδα δε θα συμπεριληφθεί' Throw New Exception("mikos < arithmos Omadon") ElseIf (list_ansiRange.Count = 0) Then ' αν δεν έχουν επιλεχθεί ομάδες δεν μπορεί να παραχθεί κωδικός' Throw New Exception("arithmos Omadon < 1") End If passwordBuilder.Clear() Select Case list_ansiRange.Count Case 1 Dim p = Me.list_ansiRange.Single For i = 1 To Me._mikos passwordBuilder.Append(Chr(Gen_TixeosInteger.Next(p))) Next Case Else Dim c = Me.list_ansiRange.Count Dim genTixInt As New Gen_TixeosInteger(0, c - 1) For i = 1 To Me._mikos - c passwordBuilder.Append(Chr(Gen_TixeosInteger.Next(list_ansiRange.Item(genTixInt.Next)))) Next genTixInt = New Gen_TixeosInteger(0, passwordBuilder.Length) For i = 1 To c passwordBuilder.Insert(genTixInt.Next,Chr(Gen_TixeosInteger.Next(Me.list_ansiRange.Item(i - 1)))) Next End Select Return passwordBuilder.ToString End Function
Κάθε φορά που πατιέται ένα κουμπί εκτελείται μια από τις παρακάτω μεθόδους. Ο κωδικάς τους είναι απλός. Απλά κάνουν μια σύνδεση του GUI με το κύριο πρόγραμμα.
Οι μέθοδοι της εφαρμογής
'Μέθοδος χειρισμού του click του κουμπιού btnGetPass 'Η μέθοδος αυτή δημιουργεί ένα κωδικό και τον γράφει στην περιοχή κειμένου' Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGetPass.Click TextBox1.Text = PareRandomKod() End Sub 'Μέθοδος χειρισμού του click του κουμπιού btnCopyClip' 'Η μέθοδος αυτή αντιγράφει το περιεχόμενο της περιοχής κειμένου στο ClipBoard' Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCopyClip.Click If String.IsNullOrEmpty(TextBox1.Text) Then Exit Sub Clipboard.SetText(TextBox1.Text) End Sub