Avatar billede maagefinke Nybegynder
04. november 2001 - 11:57 Der er 11 kommentarer og
1 løsning

Tabulere resultat i textfelt

Jeg har følgende kode:
sub command1_click
dim i as integer
dim resultat as integer
for i = 1 to 9
resultat = i*i
text1.text = text1.text & resultat
next
end sub
Spørgsmål:
Hvad skriver jeg, når jeg gerne vil have vist resultaterne i 3 kolonner i textfeltet?
Altså 3 resultater på en linje, så linjeskift, så
næste 3 resultater.
Avatar billede ea_data Nybegynder
04. november 2001 - 14:35 #1
Jeg har set denne kode som gør det muligt at operere med kolonner i listbox ( jeg ved ikke om den også kan bruges på textbox):

Følgende indsættes i modul:
Private Declare Function SendMessage Lib _
    \"user32\" Alias \"SendMessageA\" (ByVal hWnd As _
    Long, ByVal wMsg As Long, ByVal wParam As _
    Long, lParam As Any) As Long
Private Const LB_SETTABSTOPS = &H192

Public Sub SetListTabStops(ListHandle As Long, _
    ParamArray ParmList() As Variant)
    Dim i As Long
    Dim ListTabs() As Long
    Dim NumColumns As Long

    ReDim ListTabs(UBound(ParmList))
    For i = 0 To UBound(ParmList)
        ListTabs(i) = ParmList(i)
    Next i
    NumColumns = UBound(ParmList) + 1

    Call SendMessage(ListHandle, LB_SETTABSTOPS, _
        NumColumns, ListTabs(0))
End Sub
________________________________________________________________

Følgende indsættes i form med en listbox og en commandbotton:

Private Sub Command1_Click()
\'Call the routine in Form_Load to set the tab stops
\'where MyListBox is the listbox and the tab stop will
\'be around the 12th character. Generally speaking,
\'TabStop divided by four equals roughly the number of
\'characters per column:

\'Call SetListTabStops(lstMyListBox.hWnd, 48)

\'If more columns are needed, simply add them to the
\'function call:
Call SetListTabStops(lstMyListBox.hWnd, 50, 100, 150, 200)
\'Add items to the listbox using vbTab to separate
\'columns:

lstMyListBox.AddItem \"Column1\" & vbTab & \"Column2\" & vbTab & \"Column3\" & vbTab & \"Column4\"

End Sub

________________________________________________________________
Avatar billede wwc Nybegynder
04. november 2001 - 17:00 #2
jeg mener det kan gøres lettere!
Avatar billede wwc Nybegynder
04. november 2001 - 17:07 #3
Prøv dether:
sub command1_click
dim i as integer
dim resultat as integer
dim n as integer
n = 1
for i = 1 to 9
resultat = i*i
if n <= 3 then
text1.text = text1.text & chr$(9) & resultat
else
text1.text = text1.text & chr$(13) & resultat
end if
next
end sub

jeg er ikke sikker på det virker!!
men jeg prøver lige hos mog selv
Avatar billede ea_data Nybegynder
04. november 2001 - 17:50 #4
Nu er det jo ikke fordi det skal være let. I så fald var det nok bedre at vælge en anden kontrol end lige en textbox eller en listbox, fx msflexgrid.

Jeg er ret sikker på at din kode ikke virker efter hensigten.....
Avatar billede maagefinke Nybegynder
04. november 2001 - 18:10 #5
>ea data Mit kendskab til VB er MEGET beskedent,
så jeg har ikke meget lyst til at begynde at
oversætte din kode.
>WWS Det virker ikke her. Men det må være noget
med at skrive for i = 1 to 9
text1.text = text1.text & resultat & vbtab & osv.
Men det virker bare ikke...?
Avatar billede ea_data Nybegynder
04. november 2001 - 19:28 #6
Du kan evt prøve denne kode:

Private Sub Command1_Click()
Dim i As Integer
Dim resultat As Integer
For i = 1 To 9
resultat = i * i
msg = msg + Right(\"    \" + Str(resultat), 6)
If Int(i / 3) = i / 3 Then
Text1.Text = Text1.Text & msg & Chr(13) & Chr(10)
msg = \"\"
End If
Next
End Sub
Avatar billede ea_data Nybegynder
04. november 2001 - 19:32 #7
Husk at du i properties for textbox\'en skal sætte Multiline til true
Avatar billede ea_data Nybegynder
04. november 2001 - 19:49 #8
Hvis du i properties for textbox\'en yderligere sætter Font til Courier kommer tallene til at stå lidt pænere.
Avatar billede maagefinke Nybegynder
04. november 2001 - 20:04 #9
>ea data Sådan, skal det gøres. Flot!
Hvis du gider forklare mig
msg = msg + Right(\"    \" + Str(resultat), 6)
If Int(i / 3) = i / 3
(msg var ikke dimmet, jeg valgte variant)msg = besked?
forhøjer jeg til 30.
På forhånd tak.
Avatar billede ea_data Nybegynder
04. november 2001 - 21:22 #10
Jeg har arbejdet lidt videre på rutinen.
Der bruges  VbTab til at tabulere i textboxen
og  bruges  vbCrLf til at skifte linie i textboxen

Jeg har sat Msg til en strengvariabel, fordi den bruges til at
danne en tekstlinie i textboxen

Forklaring til:
msg = msg + Right(\"    \" + Str(resultat), 6)
variablen msg bruges til at gemme hver tekstlinie, som skal indsættes i textboxen.

Str(resultat) bruges til at omdanne resultat, som er en integer variabel til en strengvariabel. Foran resultat tilføjes nogle mellemrum på denne måde: \"    \" + str(resultat), for at lave mellemrum mellem tallene. 

Right bruges til at opdele den tekststreng, der er dannet af mellemrum og resultat. Right læser tekststrengen fra højre, og tager kun det antal tegn som er angivet. I dette eksempel er det 6 tegn, som læses fra højre. Det vil sige at hvis resultat består at 1 ciffer f. eks. tallet 9 danner Right en streng, som består af 5 mellemrum + \"9\". Hvis resultat består af 2 cifre f.eks tallet 36 danner Right en streng, der består af 4 mellemrum + \"36\". På den måde bliver 9 højrestilet i forhold til 36.   

Forklaring til:

If Int(i / 3) = i / 3 then

Formålet med denne linie er at indsætte linieskift de rigtige steder. D v s hver gang i er delelig med 3.

Int(i/3) returnere altid et heltal. D v s at evt decimaler bortkastes, hvis i ikke er deleligt med 3. i/3 returnere derimod også decimaler.

Int(i / 3) er derfor kun lig med i/3, når i er 3, 6 eller 9.

Jeg håber at det er forklaring nok ??....
Avatar billede ea_data Nybegynder
04. november 2001 - 21:25 #11
Hej igen

Jeg glemte vist eksemplet, hvor jeg bruger VbTab og vbCrLf

Dim i As Integer
Dim resultat As Integer
Dim Msg As String
For i = 1 To 9
resultat = i * i
Msg = Msg + vbTab + Right(\" \" + Str(resultat), 2)
If Int(i / 3) = i / 3 Then
Text1.Text = Text1.Text & Msg & vbCrLf
Msg = \"\"
End If
Next
Avatar billede maagefinke Nybegynder
04. november 2001 - 22:06 #12
Mange tak. Glæder mig til at se nøjere på det.
Det ser ihvertfald umiddelbart udførligt ud. Du
får også lidt for 2. løsning.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester