Ska mata in värden i 3 textboxar och flyttar mellan dem med "enter". Efter sista boxen går markören tillbaka till första, och då vill jag att det värdet som finns där blir helt markerat så man lätt kan skriva in nytt utan att deleta eller markera manuellt. Setfokus räcker ju inte. Sen vill jag att en viss beräkning mellam de 3 boxarna uppdateras varje gång någon av dem ändras (men bara om alla är ifyllda), och svaret kommer i textbox4. Svar på första delen av din fråga löser du efter denna princip. Tack Sven! <b>så jag måste kanske göra 4 olika former. </b> Tack igen! skapa dina textboxar som en array så slipper du ha samma kod på flera ställen Ska titta på det men jag tror ändå jag får göra en form per beräkning. Tack ändå! /P Jag var också inne på att han skulle göra en TextBox Control array Här får du ett principexempel som fungerar som jag tror du vill ha det. Nu orkar jag inte mer idag. Tror jag fick till det. Detta ser ju ruskigt bra ut. Jag lovar att inte gnälla mer om fler former. Här trillar ju mer än en 25-öring ner. Tack! Ska kolla på det ikväll om jag hinner, men inatt måste jag i varje fall sova. Kom på efter en god natt sömn att mitt kör med And operatorn är onödig. Aha, men är du säker på det? För något måste väl kolla så att txt2 & txt3 är redan ifyllda. Min tanke är ju att när man gjort en beräkning ska man kunna ändra värde i vilken ruta som helst och sen på enter få ett nytt svar. Jag vill och kan inte få ett svar om inte alla rutor har ett värde. Är du med mig? Så blir det En sista modifiering. Okej! Men mitt är lite krångligare än så. Har en del error, men vi börjar med ett: Då skulle det kunna bli så här. Tack! Ska testa detta hemma ikväll. vTusen är naturligtvis 1000. Men varför ska jag har Pi till 0.0314... då måste jag ju multiplicera med 100 också annars blir det fel. Nu börjar jag bli trött på dig.Om det är tusen vilket jag misstänkte så blir det klart 0.00314159. Ja jag började bli rädd för det. Hehe... Men jag tror att du alltid kommer att ställa upp, schysst och nyfiken som du är. Men snälla. Oki igen När man skriver prog så här "flying" så blir det "buggar" <b>Pi (3,14) har man när man ska räkna ut omkretsen med diametern som given. </b> Ironiskt... Phuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu............................ <b>Ljudet vid tryck på enter, hörs som om datorn inte tar kommandot. Kan man koda bort det.</b>Hur får man en textbox markerad?
Tack!Sv: Hur får man en textbox markerad?
Se till att dina TextBoxar har TabIndex i löpande ordning efter varandra.
Är det som jag misstänker att du bara tillåter siffror i TextBoxarna ?
<code>
Option Explicit
Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then SendKeys "{TAB}", True
End Sub
Private Sub Text2_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then SendKeys "{TAB}", True
End Sub
Private Sub Text3_KeyPress(KeyAscii As Integer)
Dim sLen As Long
If KeyAscii = 13 Then
Text1.SetFocus
sLen = Len(Text1.Text)
Text1.SelStart = 0
Text1.SelLength = sLen
End If
End Sub
</code>Sv:Hur får man en textbox markerad?
Ja det är rätt att jag bara ska tillåta siffror. De 3 textboxarna som ska utföra beräkningar, med text4 som svar, ska styras av 4 optionbuttons om vilken beräkning som ska göras. Går kanske inte, så jag måste kanske göra 4 olika former.
/PSv: Hur får man en textbox markerad?
Nej det behöver du inte. Då blir nästa steg så här
<code>
Private Sub Text1_KeyPress(KeyAscii As Integer)
Select Case KeyAscii
'Tillåt bara BackSpace,Enter,Komma,Minus,Punkt,siffror 0-9
Case 8, 13, 44, 45, 46, 48 To 57
If KeyAscii = 13 Then SendKeys "{TAB}", True
Case Else
KeyAscii = 0
End Select
End Sub
Private Sub Text2_KeyPress(KeyAscii As Integer)
Select Case KeyAscii
Case 8, 13, 44, 45, 46, 48 To 57
If KeyAscii = 13 Then SendKeys "{TAB}", True
Case Else
KeyAscii = 0
End Select
End Sub
Private Sub Text3_KeyPress(KeyAscii As Integer)
Select Case KeyAscii
Case 8, 13, 44, 45, 46, 48 To 57
If KeyAscii = 13 Then
Text1.SetFocus
Text1.SelStart = 0
Text1.SelLength = Len(Text1.Text)
End If
Case Else
KeyAscii = 0
End Select
End Sub
</code>Sv:Hur får man en textbox markerad?
Måste ha den koden för alla textboxar. Funkar bra, men hur får jag bort ljudet vid varje enterslag?
Vill utföra en beräkning t.ex. så här:
om opt1.value=true, så ska txt4 = txt1*txt2*txt3
och om opt2.value=true, så ska txt4 = txt1/(txt2*txt3)
beräkningen vill jag utföra vid enter av alla dvs. txt1, txt2 o txt3, men bara om alla har ett värde.
Låter lite krångligt men du förstår säkert. Vet inte hur jag ska mickla ihop alla ifsatser, får bara error.
/PSv: Hur får man en textbox markerad?
Sv:Hur får man en textbox markerad?
Sv: Hur får man en textbox markerad?
men då det är olika kod i 1 2 och 3 så blir det ingen större vinst.
Sluta tjata om att du behöver en extra Form det blir bara strul.
Förmodar att du funderar på dina OptionBoxar.
Dom läger du lämpligast i en liten Frame som ligger på din grund Form.Sv:Hur får man en textbox markerad?
Det är onödigt att ha Text4, du skall aldrig skriva i den. Då blir Label bäst.
Du kan ta hem Programarkivet:Matte med TextBoxar och kolla mitt förslag
<code>
Option Explicit
Dim tal1 As Double, tal2 As Double, tal3 As Double
Private Sub Option1_Click()
Text1.SetFocus
End Sub
Private Sub Option2_Click()
Text1.SetFocus
End Sub
Private Sub Text1_KeyPress(KeyAscii As Integer)
Select Case KeyAscii
'Tillåt bara BackSpace,Enter,Komma,Minus,Punkt,siffror 0-9
Case 8, 13, 44, 45, 46, 48 To 57
'Alltid punkt som decimalavskiljare
If KeyAscii = 44 Then KeyAscii = 46
If KeyAscii = 13 Then
If Option1.Value And Len(Text2.Text) And Len(Text3.Text) Then Call Multiplikation
If Option2.Value And Len(Text2.Text) And Len(Text3.Text) Then Call Division
SendKeys "{TAB}"
End If
Case Else
KeyAscii = 0
End Select
End Sub
Private Sub Text2_KeyPress(KeyAscii As Integer)
Select Case KeyAscii
Case 8, 13, 44, 45, 46, 48 To 57
If KeyAscii = 44 Then KeyAscii = 46
If KeyAscii = 13 Then
If Option1.Value And Len(Text2.Text) And Len(Text3.Text) Then Call Multiplikation
If Option2.Value And Len(Text2.Text) And Len(Text3.Text) Then Call Division
SendKeys "{TAB}"
End If
Case Else
KeyAscii = 0
End Select
End Sub
Private Sub Text3_KeyPress(KeyAscii As Integer)
Select Case KeyAscii
Case 8, 13, 44, 45, 46, 48 To 57
If KeyAscii = 44 Then KeyAscii = 46
If KeyAscii = 13 Then
If Option1.Value And Len(Text2.Text) And Len(Text3.Text) Then Call Multiplikation
If Option2.Value And Len(Text2.Text) And Len(Text3.Text) Then Call Division
Text1.SetFocus
Text1.SelStart = 0
Text1.SelLength = Len(Text1.Text)
End If
Case Else
KeyAscii = 0
End Select
End Sub
'om opt1.value=true, så ska txt4 = txt1*txt2*txt3
'och om opt2.value=true, så ska txt4 = txt1/(txt2*txt3)
Private Sub Multiplikation()
tal1 = Val(Text1.Text)
tal2 = Val(Text2.Text)
tal3 = Val(Text3.Text)
Label1.Caption = Str$(tal1 * tal2 * tal3)
End Sub
Private Sub Division()
tal1 = Val(Text1.Text)
tal2 = Val(Text2.Text)
tal3 = Val(Text3.Text)
Label1.Caption = Str$(tal1 / (tal2 * tal3))
End Sub
</code>Sv: Hur får man en textbox markerad?
Kolla Programarkivet:Matte med TextBoxarSv:Hur får man en textbox markerad?
Tack!
/PSv: Hur får man en textbox markerad?
Dessa rader skall ändras till
<code>
If Option1.Value Then Call Multiplikation
If Option2.Value Then Call Division
</code>
Sub Division skall ändras till
<code>
Private Sub Division()
On Error GoTo DivError
tal1 = Val(Text1.Text)
tal2 = Val(Text2.Text)
tal3 = Val(Text3.Text)
Label1.Caption = Str$(tal1 / (tal2 * tal3))
Exit Sub
DivError:
End Sub
</code>Sv:Hur får man en textbox markerad?
Vad gör då "Len()"?
/PSv: Hur får man en textbox markerad?
Vid multipikation blir svaret 0 intill alla textboxar är ifyllda.
Vid division händer ingenting förrän alla är ifyllda.
Kolla mitt uppskick Programarkivet:Matte med TextBoxar TextBoxar.exe
Jag har "moddat" den så det nya gäller.
Len(Text1.Text) lämnar svar på hur många tecken det finns i TextBoxen.
Lämnar 0 (Noll) om den är tom dvs. <b>False</b> i vårt exempel.Sv: Hur får man en textbox markerad?
Sub Multiplikation och Sub Division bör ändras till detta.
<code>
Private Sub Multiplikation()
tal1 = Val(Text1.Text)
tal2 = Val(Text2.Text)
tal3 = Val(Text3.Text)
If (tal1 * tal2 * tal3) <> 0 Then
Label1.Caption = Str$(tal1 * tal2 * tal3)
Else
Label1.Caption = ""
End If
End Sub
Private Sub Division()
On Error GoTo DivError
tal1 = Val(Text1.Text)
tal2 = Val(Text2.Text)
tal3 = Val(Text3.Text)
Label1.Caption = Str$(tal1 / (tal2 * tal3))
Exit Sub
DivError:
Label1.Caption = ""
End Sub
</code>Sv:Hur får man en textbox markerad?
Ska räkna fram ett varvtal från två värden i txt1 & txt2 & 2 fasta värden.
Private Sub Varvtal()
vSkarHast = Val(txt1.Text)
vFrasDia = Val(txt2.Text)
vVarvTal = Str$(vSkarHast * vTusen) / (vFrasDia * vPi)
lblSvar.Caption = FormatNumber(vVarvTal, 0)
End Sub
Den verkar hänga sig på formeln. Har gjort vTusen=100 & vPi=3.14 men det är ju egentligen två konstanter. Vet inte hur jag hanterar det. Ska kanske skriva talen direkt i formeln. Det är i varje fall inget som hjälper.
/PSv: Hur får man en textbox markerad?
Du har förmodligen gjort vTusen och vPi i en Lokal Sub
Ta bort dom och kör så här.
Konstanten vTusen är onödig, använd 0.0314195 som vPi enl.nedan
<code>
Option Explicit
'Om vSkarHast och vFrasDia innehåller decimaler .
'får du ändra dessa till As Single
Dim vSkarHast As Long, vFrasDia As Long, vVarvTal As Single
Const V_PI = 0.0314159
'Har gjort vTusen=100 & vPi=3.14 men det är ju egentligen två konstanter.
'Skall V_TUSEN inte vara Tusen ?
Private Sub Txt1_KeyPress(KeyAscii As Integer)
Select Case KeyAscii
'Tillåt bara BackSpace,Enter,Komma,Minus,Punkt,siffror 0-9
Case 8, 13, 44, 45, 46, 48 To 57
'Alltid punkt som decimal avskiljare
If KeyAscii = 44 Then KeyAscii = 46
If KeyAscii = 13 Then
Call Varvtal
SendKeys "{TAB}"
End If
Case Else
KeyAscii = 0
End Select
End Sub
Private Sub Txt2_KeyPress(KeyAscii As Integer)
Select Case KeyAscii
'Tillåt bara BackSpace,Enter,Komma,Minus,Punkt,siffror 0-9
Case 8, 13, 44, 45, 46, 48 To 57
'Alltid punkt som decimal avskiljare
If KeyAscii = 44 Then KeyAscii = 46
If KeyAscii = 13 Then
Call Varvtal
txt1.SetFocus
txt1.SelStart = 0
txt1.SelLength = Len(txt1.Text)
End If
Case Else
KeyAscii = 0
End Select
End Sub
Private Sub Varvtal()
On Error GoTo VarvTalError
vSkarHast = Val(txt1.Text)
vFrasDia = Val(txt2.Text)
vVarvTal = vSkarHast / (vFrasDia * V_PI)
lblSvar.Caption = Int(vVarvTal)
VarvtalOk:
Exit Sub
VarvTalError:
' Division med 0 (noll)
lblSvar.Caption = ""
Resume VarvtalOk
End Sub
</code>Sv:Hur får man en textbox markerad?
Detta var altså EN beräkning. Nu ska det vara 4 beräkningar som ska samsas om 3 txtboxar. Där koden i varje "Sub txt_KeyPress" är annorlunda beroende på vilken av de 4 optButton som är True.
T.ex. så ska txt3 bara användas i 2 av beräkningarna, så i txt2 ska ibland vid enter gå till txt3 och ibland till txt1.
Det har jag försökt lösa med många If-satser, men då har jag plötsligt fått ett fel att "Case Else ligger utaför Select Case-satsen". Kan det va så att man inte kan ha hur många If-satser som helst?
Förstår du nu varför jag "gnällde" om att ha en Form för varje beräkning? Då kan man bygga varje "Sub txt_KeyPress" efter hur just den beräkningen ska gå till.
Behöver det va någon nackdel att göra så? Man kan ju göra ett MDI-fönster med 4 "barn". Det syns ju aldrig när man kör programmet. Och det är väl ingen större risk att det blir för "tungt"?
En sak är säker: Jag har jäkligt bra nytta av din kod även med flera Former.
Tack!
Hålligång!!!
/PSv: Hur får man en textbox markerad?
Du har nu grundkod för alla alternativ, läs och använd efter behov.
<code>
'Om vSkarHast och vFrasDia innehåller decimaler .
'får du ändra dessa till As Single
Dim vSkarHast As Long, vFrasDia As Long, vVarvTal As Single
Const V_PI = 0.00314159
</code>
Du skall inte ha fler Formar.Lägg hellre 2 3 Frame:s på En Form.
I dessa Frames lägger du det antal TextBoxar och OptionBoxar som du behöver.
Du lägger Frames: rätt över varandra Visual=False resp Visual = True Dvs ex 2 är False och en True.
Lägg Label.s till vänster som på denna Pelles sida.
När du klickar på någon av dom så släcker du 2-3 av Frames och har bara en, den aktuella tänd.Sv:Hur får man en textbox markerad?
Men en sak har du missuppfattat. Pi (3,14) har man när man ska räkna ut omkretsen med diametern som given. Tusen (1000) har man för att omvandla mm till m. Så de hör inte ihop även om man har de i samma formel.
Att använda Frames på det sättet har jag aldrig tänkt på men jag tackar för tipset. Det ska jag säkert fixa mer eller mindre.
Ha en trevlig kväll!
/PSv: Hur får man en textbox markerad?
<b>vVarvTal = vSkarHast / (vFrasDia * 0.00314159)
Ger samma svar som
vVarvTal = (vSkarHast * 1000) / (vFrasDia * 3.14159) .</b>
Jag tycker ditt projekt är småtrevlig terapi.
Sitter just och skruvar på en principlösning till dig med Frame:s
Jag kommer att uppdater Programarkivet:Matte med TextBoxar strax återkommer på denna kanal.
Ha det
SvenPonSv:Hur får man en textbox markerad?
Nu har jag lagt upp en uppdaterad version med Frame:s på
Frame 3 o 4 får du själv bygga vidare på
Programarkivet:Matte med TextBoxarSv:Hur får man en textbox markerad?
Kul att höra vilka "buggar" Ni hittar.
Nyfiken Sven
Jobba vidare Peter du lär dig en massa.
Snälla Sven ;-) IKVÄLL !!!!!
I morgon är det som vanligt !Sv: Hur får man en textbox markerad?
Garvar läppen av mig. *LOL*
Jahaaaaaaaaaaaaa....... är det så det är *LOL*Sv:Hur får man en textbox markerad?
...fattar väl att du fattar, men när du ville ta 1000 * entusendelsPi för att få Pi var jag ju tvungen att förklara.
Lite petitesser:
Ljudet vid tryck på enter, hörs som om datorn inte tar kommandot. Kan man koda bort det.
Txt1.SelStart = 0 ? Vad händer här?
Resume VarvtalOk? Fattar inte detta heller.
/PSv: Hur får man en textbox markerad?
Ljudet skiter jag i. Sök i Kontrollpanelen !
Snygg programmering:
<b>Txt1.SelStart = 0 ? Vad händer här?
Resume VarvtalOk? Fattar inte detta heller.</b>
SelStart = 0 (börja just före första tecken)
Resume VarvtalOk. Samma här, snygg programmering.
Om det inträffat ett fel så gå tillbaka till Exit Sub
Ex. här om man försöker dividera med 0 (noll) Dvs. tom TextBox
<b>Ett gott råd ! Krångla inte nu.</b> Kör min kod och lär dig och kom med konstruktiv kritik. ;-) :-)
Du är ju som en av dom första oskulder jag förförde. ;-)Sv: Hur får man en textbox markerad?
Lägg till KeyAscii = 0 så får du bort ljudet.
<code>
If KeyAscii = 13 Then
KeyAscii = 0
'resten av din kod
End If
</code>
Thomas