Aus einem Dezimalwert Bits errechnen und werten.
- VB.NET
Sie verwenden einen veralteten Browser (%browser%) mit Sicherheitsschwachstellen und können nicht alle Funktionen dieser Webseite nutzen.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Es gibt 32 Antworten in diesem Thema. Der letzte Beitrag () ist von DannyDee.
-
-
Dein ganzer Quelltext ist eine einzige Frage.Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch
Ein guter .NET-Snippetkonverter (der ist verfügbar).
Programmierfragen über PN / Konversation werden ignoriert! -
Wenn du ein Problem damit hast oder eine Idee hast etwas besser zu machen, dann kannst du dies gerne sagen. Aber komm nicht mit so Meldungen.
Wenn du Kritik hast, dann sprich. Wenn du nur flamen willst, dann lass es.SWYgeW91IGNhbiByZWFkIHRoaXMsIHlvdSdyZSBhIGdlZWsgOkQ=
Weil einfach, einfach zu einfach ist! -
BiedermannS schrieb:
VB.NET-Quellcode
- 'Das sind die Flags (Schalter) die deine Relais darstellen
- 'Links steht der Name, rechts der Wert (jeder wert ist der Wert des binären Stellenwerts von rechts nach links)
- Public Enum Relais
- _1 = 1 'Erstes Relais
- _2 = 2 'Zweites Relais usw...
- _3 = 4
- _4 = 8
- _5 = 16
- _6 = 32
- _7 = 64
- _8 = 128
- End Enum
- 'In diesem Dictionary wird eine Zuordnung von dem Wert im Enum Relais zum entsprechenden Button gespeichert
- 'also wenn das Dictionary mit Relais._1 aufgerufen wird, so greift man auf button1 zu, bei Relais._2 auf button2 usw...
- Private RefTable As New Dictionary(Of Relais, Windows.Forms.Button) From {{Relais._1, button1}, {Relais._2, button2}, {Relais._3, button3},
- {Relais._4, button4}, {Relais._5, button5}, {Relais._6, button6},
- {Relais._7, button7}, {Relais._8, button8}}
- Sub Main()
- 'In dieser Variable, wird der Dezimalwert gespeichert, der angibt welche Relais aktiviert sind.
- Dim r As New Relais
- 'Hier wird als Beispiel, der Wert für die Relais 2 5 und 7 in die variable gespeichert.
- 'durch das or werden die werte binär verknüpft
- r = Relais._2 Or Relais._5 Or Relais._7
- 'Diese Methode prüft, welche werte aktiv sind und setzt die Farben der Schalter dementsprechend
- 'r = der Dezimalwert der überprüft werden soll
- 'Relais._8 = der höchste Wert
- SetColors(r, Relais._8)
- 'man kann allerdings auch normale Ganzzahlen darin speichern
- r = 16
- SetColors(r, Relais._8)
- End Sub
- '''
- ''' Diese Methode prüft, welche werte aktiv sind und setzt die Farben der Schalter dementsprechend
- '''
- ''' der Dezimalwert der überprüft werden soll
- ''' der höchste Wert
- '''
- Public Sub SetColors(ByVal r As Relais, ByVal Max As Integer)
- 'bei diesem Wert beginnt die Schleife
- Dim enu As Relais = Relais._1 ' = 1
- 'Diese Variable, dient der Zählung der durchläufe und somit der Ermittlung der Binärstelle
- Dim counter As Integer = 1
- 'Die Schleife wird so lange durchlaufen, bis der aktuelle binärwert größer als der maximale wert ist (in diesem Fall Relais._8 also 128)
- Do Until enu > Max
- 'Ist der aktuelle Binärwert im Dezimalwert gesetzt (also das Relais aktiviert)
- If r.HasFlag(enu) Then
- 'Färbe den entsprechenden Button Grün ein
- RefTable(enu).BackColor = Color.Green
- 'sonst
- Else
- 'Färbe den entsprechenden Button Rot ein
- RefTable(enu).BackColor = Color.Red
- End If
- 'berechne den neuen Stellenwert und setze den counter auf die neue Stelle
- enu = 2 ^ counter
- counter += 1
- 'der Stellenwert berechnet sich beim binären wie folgt
- 'erste Stelle = 2 hoch 0 (muss nicht beachtet werden, da dies der ausgangszustand ist)
- 'zweite Stelle = 2 hoch 1
- 'dritte Stelle = 2 hoch 2
- 'vierte Stelle = 2 hoch 3
- 'darum wird der counter immer um 1 erhöht und der stellenwert mit 2 ^ counter berechnet
- Loop
- End Sub
Wenn du noch Fragen hast, sag bescheid
Also bei mir kommen da einige kleine Fehler auf... Habe es wie folgt mal dazugetippt :
VB.NET-Quellcode
- Public Class Form1
- Public Enum Relais
- _0 = 1
- _1 = 2
- _2= 4
- _3 = 8
- _4 = 16
- End Enum
- Private RefTable As New Dictionary(Of Relais, Windows.Forms.Button){{Relais._0, cmd_rel0} , {Relais._1, cmd_rel1},{Relais._2 , cmd_rel2},{Relais._3 , cmd_rel3},{Relais._4 , cmd_rel4}
- Sub Main()
- Dim r As New Relais
- r = Relais._0 Or Relais._1 Or Relais._2 Or Relais._3 Or Relais._4
- SetColors(r, Relais._4)
- End Sub
- Public Sub SetColors(ByVal r As Relais, ByVal Max As Integer)
- Dim enu As Relais = Relais._1
- Dim counter As Integer = 1
- Do Until enu > Max
- If r.HasFlag(enu) Then
- RefTable(enu).BackColor = Color.Green
- Else
- RefTable(enu).BackColor = Color.Red
- End If
- enu = 2 ^ counter
- counter += 1
- Loop
- End Sub
- End Class
Soweit so gut , dank deiner Erklärung hab ich das Prinzip (glaube ich zumindest) relativ verstanden. Aber ich muss jz nochmal den Unwissenden raushängen lassen und sagen ,dass mir bei
und
bei
Wie kann ich diese Fehler beheben , und habe ich den Code richtig eingebunden? -
DannyDee schrieb:
Wie kann ich diese Fehler beheben
Nimm einfach den Code, den ich Dir gepostet habe.Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch
Ein guter .NET-Snippetkonverter (der ist verfügbar).
Programmierfragen über PN / Konversation werden ignoriert! -
Sehr schade -.-' Da hab ichs mal verstanden und dann sowas! Naja okey... Dann werd ich deinen Code nutzen ,sofern ich ihn endlich kapiere. Scheint ja nicht schwer zu sein. Ich probiers mal aus , und schaue was dabei rumkommt.
Edit by hal2000:
- Vollzitat entfernt. Bitte in Zukunft vermeiden.Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „hal2000“ ()
-
DannyDee schrieb:
Hier fehlt ein } am ende
RodFromGermany schrieb:
Indem Du VB2010 verwendest, wie das @BiedermannS: tut, der aber leider nicht gelesen hat, dass Du nur das Studio 2005 hast.
Nimm einfach den Code, den ich Dir gepostet habe.
Rod's Code ist in dem Fall wohl besser, da er manche Funktionalitäten nicht benötigt und trotzdem funktioniert.
@RodFromGermany: Ich warte trotzdem noch auf meine Kritik Will ja wissen, was ich falsch mache...SWYgeW91IGNhbiByZWFkIHRoaXMsIHlvdSdyZSBhIGdlZWsgOkQ=
Weil einfach, einfach zu einfach ist! -
BiedermannS schrieb:
Will ja wissen, was ich falsch mache...
Du hilfst ihnen, wenn Du sie in die richtige Richtung dirigierst. Lernen müssen sie allein, und das geht nun mal nicht mit vollständigem C&P-Code.Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch
Ein guter .NET-Snippetkonverter (der ist verfügbar).
Programmierfragen über PN / Konversation werden ignoriert! -
Nun gut , aber bei
VB.NET-Quellcode
- Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
- Dim bits() As Integer = {1, 2, 4, 8, 16, 32, 64, 128}
- Dim result(7) As Integer
- Dim value As Integer = 7
- For i As Integer = 0 To 7
- If (value And bits(i)) = bits(i) Then
- result(i) = 1
- End If
- Next
- End Sub
frage ich mich , wie ich die Farben zuweisen kann und welcher der Dim's der ausgelesene Wert ist , denn wenn ich das richtig verstanden habe sollte Value doch der Wert sein den ich auslese , und da ich per auslese müsste es doch in etwa so aussehen :
VB.NET-Quellcode
- Private Sub cmd_read_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmd_read.Click
- tb_read.Text = readReg(20, 0)
- Dim bits() As Integer = {1, 2, 4, 8, 16, 32, 64, 128}
- Dim result(7) As Integer
- Dim value As Integer = readReg(20, 0)
- For i As Integer = 0 To 7
- If (value And bits(i)) = bits(i) Then
- result(i) = 1
- End If
- Next
- End Sub
-
Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch
Ein guter .NET-Snippetkonverter (der ist verfügbar).
Programmierfragen über PN / Konversation werden ignoriert! -
du könntest, statt dem Result zu speichern (ausser du brauchst es noch öfter), gleich die farbe setzen.
wurde hier auch schon mal erwähnt, wie man controls über den namen anspricht: me.controls("NameDesControls")
@RodFromGermany: Ach so, dachte du meinst die Qualität des Codes....
Ja ich weiß, ich bin manchmal hilfsbereiter als ich eigentlich sein sollte.SWYgeW91IGNhbiByZWFkIHRoaXMsIHlvdSdyZSBhIGdlZWsgOkQ=
Weil einfach, einfach zu einfach ist! -
Wenn ich der Meinung bin,
BiedermannS schrieb:
die Qualität des Codes....Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch
Ein guter .NET-Snippetkonverter (der ist verfügbar).
Programmierfragen über PN / Konversation werden ignoriert! -
Iiiiiiiich gebe jetzt einfach mal auf ,was dieses Thema betrifft , bzw lege es auf Eis. Ich klopp mir erstmal die Grundlagen rein , übe etwas und arbeite mich Stück für Stück voran , sobald ich mit der Marterie vertraut bin können wir weiter reden. Waidmanns Hail und nen schönen Arbeitstag an euch alle.
-
Tags
-
Ähnliche Themen
-
Dietmar74 - - Sonstige Problemstellungen
-
4 Benutzer haben hier geschrieben
- Gast (12)
- RodFromGermany (11)
- BiedermannS (7)
- ~blaze~ (3)