Εφαρμογή Windows Forms -γεννήτρια κωδικού- (μέρος 2/2)

Εφαρμογή Windows Forms -γεννήτρια κωδικού- (μέρος 2/2)

Απλή εφαρμογή Windows Forms – γεννήτρια κωδικών (συνέχεια)

Δείτε το πρώτο μέρος του άρθρου εδώ.

Το ζητούμενο είναι η εφαρμογή αυτή να είναι όσο πιο απλή γίνεται, με λίγα controls για τη χρήση του κυρίου προγράμματος και για τη σωστή και responsive αναπαράσταση των control στις θέσεις τους.

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

Όταν ξεκινάει η εφαρμογή δημιουργείται η φόρμα

Κατα την δημιουργία:

  1. κάθε φόρμα πρέπει πρώτα να καλέσει μια μέθοδο της, την InitializeComponent – χωρίς αυτό δεν μπορεί να λειτουργήσει. Σε αυτή δημιουργούνται όλα τα controls (τα κουμπιά, οι περιοχές εισαγωγής κειμένων), τα οποία είναι και αυτά αντικείμενα.
  2. συσχετίζονται τα γεγονότα των κουμπιών και των κουτιών επιλογής με τις αντίστοιχες μεθόδους που τα χειρίζονται
  3. δημιουργείται ένα αντικείμενο τύπου Kodikos και παραμετροποιείται με κάποιες αρχικές παραμέτρους που δεν έχουν νόημα.
  4. δημιουργούνται αντικείμενα τύπου 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

Απάντηση

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