can sbd help me for convert the code from VB.NET to B4A?
B4X:
Dim i As Integer
Integer.TryParse(Parse1, OUTPUT1)
Integer.TryParse(Parse2, OUTPUT2)
Integer.TryParse(Parse3, OUTPUT3)
Integer.TryParse(Parse4, OUTPUT4)
If OUTPUT1 < 0 OrElse OUTPUT1 > 255 Then Return
For i = 0 To 7
myCheckBoxen1(i).Checked = (OUTPUT1 And 1 << i) > 0
myCheckBoxen2(i).Checked = (OUTPUT2 And 1 << i) > 0
myCheckBoxen3(i).Checked = (OUTPUT3 And 1 << i) > 0
myCheckBoxen4(i).Checked = (OUTPUT4 And 1 << i) > 0
Next i
Dim BinVar1 As String
BinVar1 = "32"
BinVar1 = Bit.ToBinaryString(Parse1)
BinVar1 = NumberFormat2(BinVar1, 8 ,0,0,False)
ToastMessageShow(BinVar1,True)
ToastMessageShow(Bit.Shiftleft(Bit.And(BinVar1,1),1),False)
Ausgabe = "22"
Warum?
ich habe 8 Checkboxen, und die sollen auf True oder False gesetzt werden.
bei 255 sollen natürlich alle auf True gesetzt werden.
B4X:
For i = 0 To 7
Dim p As Panel = ScrollView1.Panel.GetView(i)
Dim btnTog As ToggleButton = p.GetView(1)
If Bit.Shiftleft(BinVar1,1) = 1 Then
btnTog.Checked =True
Else
btnTog.Checked =False
End If
Next
Dieses Shift verschiebt die Bits.
Mach es doch einfacher
If Bit.And(Wert,1) = 1 Then Checkbox 1 An Else Checkbox 1 Aus
If Bit.And(Wert,2) = 2 Then Checkbox 2 An Else Checkbox 2 Aus
If Bit.And(Wert,4) = 4 Then Checkbox 3 An Else Checkbox 3 Aus
Nun, jetzt habe ich ja den gewünschten Wert als Ausgabe. D. h. die 32 wird mir jetzt in 00010000 angezeigt.
Jetzt muss ich sie nur zerlegen, d.h jeden einzelnen Bit abfragen ob es eine null oder eine eins ist.
Und dann die 8 dynamisch geladenen CheckBoxen setzen.
mein Beipiel in #12 war doch ohne Bit Shift.
Das hier filtert aus der Zahl den Wert 1, also Bit 1 und vergleicht das mit dem Bit Wert 1, also z.B. aus 33 nur die 1
Bit.And(Wert,1) = 1
Ja aber du hast Checkbox 1.... 8
Meine sind dynamisch geladen und heissen alle CheckBox1. Die Checkboxen simd in einem Panel.
B4X:
For i = 0 To 7
Dim p As Panel = ScrollView1.Panel.GetView(i)
Dim btnTog As ToggleButton = p.GetView(1)
If Bit.Shiftleft(BinVar1,1) = 1 Then
btnTog.Checked =True
Else
btnTog.Checked =False
End If
Next
Sub Test
Dim i As Int
Dim Wert As Int = 33 '32+1
Dim Bits As Int 'der Name Bit wäre schöner aber eine Klasse heißt ja so
For i = 0 To 7
Bits = Power(2,i) 'das macht 1,2,4,8,16,32,64,128
If Bit.And(Wert,Bits)=Bits Then Log(i & " An") Else Log(i & " Aus")
Next
End Sub
du könntest die generierten Checkboxen auch in eine Liste oder Array tun, dann sind die einfacher anzusprechen per Index.
For i = 0 To 7
Dim p As Panel = ScrollView1.Panel.GetView(i)
Dim btnTog As ToggleButton = p.GetView(1)
If BinVar1.CharAt(i) = 1 Then
btnTog.Checked =True
ToastMessageShow("True",False)
Else
btnTog.Checked =False
ToastMessageShow("False",False)
End If
'
Next
allerdings brauche ich jetzt einen String verdreher