04. november 2001 - 11:57Der 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.
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:
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
>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...?
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
>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.
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 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
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.
Synes godt om
Ny brugerNybegynder
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.