vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevDataGrid - Gönnen Sie Ihrem SQL-Kommando diesen krönenden Abschluß!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Allgemeine Diskussionen
So, hier mal mein Ansatz zu dem Problem!  
Autor: unbekannt
Datum: 15.08.01 11:56

Hi Hotte, Hi Ronny

Das Problem von Hotte erscheint in einem flüchtigen Augenblick als etwas wie: "Warum braucht man das?". Hotte will das Erscheinungsbild in einer Form, in der sieben Kontrollboxen je für einen Tag stehen, in einem Feld haben, das symbolisieren soll, welche Kontrollboxen checked sind und welche nicht.

Ein einer Feldvariablen oder UDT wäre der Zustand der Kontrollboxen ja leicht nachvollziehbar - aber, wie sieht es aus, wenn dieser Zustand ja gespeichert werden soll? Wie sieht das aus, wenn man eine Anwendung hat und man beim Anruf der Anwendung den Zustand der Kontrollboxen wieder herstellen möchte?

Das ist der Ansatz von Hotte, und ich meine mit der Ansatzlösung, jeder Kontrollbox einen Wert zuzuweisen, bereits schon genial angedacht.

Betrachten wir mal das Szenario genauer:

Sieben Kontrollboxen, jede Kontrollbox erhält einen Wert:

Sonntag = 1
Montag = 2
Dienstag = 4
Mittwoch = 8
Donnerstag = 16
Freitag = 32
Samstag = 64

Daraus läßt sich ein einziger String formeln, ein Binärcode. Ist z.B. Sonntag, Mittwoch und Freitag checked, ergibt sich der folgende String:

"0101001" Dieser Binärcode definiert allerdings eine Dezimalzahl, die sich aus der Summe der Werte, der einer Kontrollbox zugewiesen ist, ergibt. In dem Beispiel hätte eine einzige Variable den Wert: 1 + 8 + 32 = 41.

In einer Datenbank oder in der Registry würde ich den Zustand der sieben Kontrollboxen somit abspeichern: 41 Eine Variable vom Typ Byte - kürzer geht es nicht mehr!

Jetzt wird der Wert wieder geladen und der Zustand der Kontrollboxen soll wieder hergestellt werden, hier kommt nun die folgende Funktion zur Wirkung (eine Abwandlung der Byte2BinHex - Funktion aus unseren Tipps & Tricks):

'Funktion Dez2Bin(Wert)
'Gibt aus einer Dezimalzahl einen binären Code als String zurück
'
Private Function Dec2Bin (Byval nDec As Integer) As String
    Dim i As Byte
    Dim n As Integer
    Dim BinString As String
    n = nDec
    For i = 7 To 0 Step -1
        If (n - 2 ^ i) >= 0 Then
            BinString = BinString + "1"
            n = n - 2 ^ i
            b = True
        ElseIf b Then
            BinString = BinString + "0"
        End If
    Next
    'Führende Nullen anfügen:
    If Len(BinString) < 7 Then
       BinString = Binstring & String(7 - Len(Binstring),"0")
    End If
    Dec2Bin = BinString
End Function
Jetzt brauche ich nur noch diesen String auszuwerten, um den Zustand der Kontrollboxen zu restaurieren:

Private Function IsChecked (Byval sBinString As String, Byval nNr) _
                            As Boolean
     If sBinString = "" Then Exit Function
     If nNr < 1 Or nNr > Len(sBinString) Then Exit Function
     IsChecked = False
     If Mid(sBinString, nNR,1)="1" then IsChecked = True
End Function
Aus meiner gespeicherten Zahl erhalte ich mit dieser Funktion also zurück: "0101001"

Natürlich waren wir so clever, und haben unsere Kontrollböxchen in der Entwicklungszeit als Steuerelementfeld angelegt:

Private Sub Form_Load()
    'Den gespeicherten Wert aus dem Speichermedium zurückholen
    Dim i As Byte
    Dim Binstr As String
    i = "gespeicherter Wert
    BinStr = Dec2Bin(i)
    For i = 0 To CheckBox1.Count - 1
       Checkbox1(i).Value = IsChecked(BinStr, CheckBox1.Count-i)
    Next
End Sub
Voila! In der Kürze liegt die Würze.

Zusammenfassung:

Private Sub Form_Load()
    'Den gespeicherten Wert aus dem Speichermedium zurückholen
    Dim i As Byte
    Dim Binstr As String
    i = "gespeicherter Wert
    BinStr = Dec2Bin(i)
    For i = 0 To CheckBox1.Count - 1
       Checkbox1(i).Value = IsChecked(BinStr,Checkbox1.Count-i)
    Next
End Sub
 
Private Function IsChecked (Byval sBinString As String, Byval nNr) _
                            As Boolean
     If sBinString = "" Then Exit Function
     If nNr < 1 Or nNr > Len(sBinString) Then Exit Function
     IsChecked = False
     If Mid(sBinString, nNR,1)="1" then IsChecked = True
End Function
 
Private Function Dec2Bin (Byval nDec As Integer) As String
    Dim i As Byte
    Dim n As Integer
    Dim BinString As String
    n = nDec
    For i = 7 To 0 Step -1
        If (n - 2 ^ i) >= 0 Then
            BinString = BinString + "1"
            n = n - 2 ^ i
            b = True
        ElseIf b Then
            BinString = BinString + "0"
        End If
    Next
    'Führende Nullen anfügen:
    If Len(BinString) < 7 Then
       BinString = Binstring & String(7 - Len(Binstring),"0")
    End If
    Dec2Bin = BinString
End Function
cu
Lordchen
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Rechenexemple76hotte14.08.01 19:12
Re: Rechenexemple450unbekannt14.08.01 19:18
mit einer kleinen Änderung:354unbekannt14.08.01 19:26
Re: Wo liegt der Trick50hotte14.08.01 19:41
Re: lösung mit 2,4,8,16,32,64,12850Ronny42Dach14.08.01 20:37
So Trick bei Seite! 45Ronny42Dach14.08.01 22:30
??? - (kein Text)384unbekannt15.08.01 01:33
Lordchen hat ein Problem ....360unbekannt15.08.01 02:31
Ganz einfach, morgen aber die komplette Funktion. 367unbekannt15.08.01 01:39
Re: Rechenexemple43Ronny42Dach14.08.01 19:18
Re: Rechenexemple - Danke45hotte14.08.01 20:15
Re: Rechenexemple371unbekannt14.08.01 19:19
Re: Rechenexemple39hotte14.08.01 19:29
Re: Listing44Ronny42Dach14.08.01 20:07
So, hier mal mein Ansatz zu dem Problem! 479unbekannt15.08.01 11:56
Re: So, hier mal mein Ansatz zu dem Problem! 42hotte16.08.01 18:43
Re: da fehlt doch was....?!58hotte16.08.01 19:12
Re: da fehlt doch was....?!42Ronny42Dach16.08.01 19:18

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel