11. august 2009 - 19:38Der er
10 kommentarer og 1 løsning
Flere tekster i en linje i en listbox. Hvordan?
Jeg har set et program hvor du har en listbox og 3 textboxe hvor du så kan skrive noget i alle 3 textboxe og så tryk på en add knap og så kommer alle 3 små tekster i 1 linje. Men en meget meget simpel, logisk og let forståelig kode til det. Hvordan vil det se ud? Altså bare så lille som muligt. En listbox. 2 textboxe. 1 command knap og så skal det bare være sådan at du skriver 2 - 3 ord i begge textboxe og så add og så har du en linje i en listbox hvor det er del op med mellemrum mellem dem. Efterfølgende hvis du så trykker på din text på listboxen så kommer den igen i dine 2 textboxe.
Håber der er nogen som vil give en god løsning med en meget god forklaring dertil.
altså noget i stil med. --------------------------------------- | Tekst 1 | Tekst 2 | <--- skal stå der fast --------------------------------------- | noget tekst | noget mere tekst | | endnu mere | meget meget mere | --------------------------------------- --------- -------- |Tekst1 | |Tekst2| --------- --------
----- |ADD| -----
Så du har tekst 1 og tekst 2 som står der fast som min oversrkift. Så har du de andre ting som bliver sat ind ved at skrive dem i tekst 1 og tekst 2 boxe og klikke add.
Min bedste teori er noget med.
nr1= text1.text1 nr2= text2.text2
list1.AddItem = nr1 and width=100 nr2
Mit bedste bud, men fortæl mig lige om jeg her helt gal på den Og igen når den skal indlæses så i list1 click noget med text1.text = list.index text2.text = list.index width 100
Private Sub CommandButton1_Click() 'ADD.knappen If Me.TextBox1 <> "" And Me.TextBox2 <> "" Then Me.ListBox1.AddItem Me.TextBox1 Me.ListBox1.List(Me.ListBox1.ListCount - 1, 1) = Me.TextBox2
Me.TextBox1 = "" Me.TextBox2 = "" End If End Sub Private Sub ListBox1_Click() Me.TextBox1 = Me.ListBox1 Me.TextBox2 = Me.ListBox1.List(Me.ListBox1.ListIndex, 1) End Sub Private Sub UserForm_activate() Rem Opsætning af listbox With Me.ListBox1 .ColumnCount = 2 .ColumnWidths = "100;100" End With End Sub
Har lige sat den her kode sammen. Kan du så ik lige rette i den så den virker ;o) For tror da helt klart du har fat i noget der..
Altså helt nyt project.
tekst1 tekst2 list1 command1
Det er altså hvad jeg har at arbejde med. De standart navne de nu får når man opretter et object. Så gør jeg føglende:
Jeg dobbelklikker på command1 og tilføjer så der står følgende kode:
Option Explicit
Private Sub Command1_Click()
If Me.Text1 <> "" And Me.Text2 <> "" Then Me.List1.AddItem Me.Text1 Me.List1.List(Me.List1.ListCount - 1) = Me.Text2 Me.Text1 = "" Me.Text2 = "" End If
Det klager den så over med følgende fejl:
Wrong number of arguments or invalid property assignment
Så tager jeg ,1 og sletter den.
Så kører det næsten for den tilføjer kun text2, men det kommer vi til senere.
så dobbelt klikker jeg på min list1 og tilføjer så der står:
Private Sub List1_Click() Me.Text1 = Me.List1 Me.Text2 = Me.List1.List(Me.List1.ListIndex, 1) End Sub
og igen.
Wrong number of arguments or invalid property assignment
Så igen fjerner jeg ,1 så langt så godt. Men når jeg så klikker får jeg KUN de resultater fra text2
Så har vi: Private Sub UserForm_activate() Rem Opsætning af listbox With Me.ListBox1 .ColumnCount = 2 .ColumnWidths = "100;100" End With End Sub
Den bliver så ændret til:
Private Sub Form_Activate() Rem Opsætning af listbox With Me.List1 .ColumnCount = 2 .ColumnWidths = "100;100" End With End Sub
Så får jeg Method or data member not found ved .columnCount = 2
og her ved jeg så ikke hvad der er galt?
Og så her er følgende spørgsmål til al koden og husk på jeg er ny til det her ;o)
If Me.Text1 <> "" And Me.Text2 <> "" Then Me.List1.AddItem Me.Text1 Altså hvis der står noget i text 1 og text2 så skal text1 add'es til list1. Som jeg forstår det, men den tilføjer jo text2 :o/
Me.List1.List(Me.List1.ListCount - 1) = Me.Text2 Me.Text1 = "" Me.Text2 = "" End If
Den forstår jeg så ikke helt ud over at du igen siger at text1 og text2 skal være tommer. Altså = ""
Private Sub ListBox1_Click() Me.TextBox1 = Me.ListBox1 Me.TextBox2 = Me.ListBox1.List(Me.ListBox1.ListIndex, 1) End Sub forstår ik lige me.textbox1 = me.listbox1 Hvorfor skal det ik være noget i stil me. me.textbox1 = me.listbox1.list(me.listbox1.listindex) Me.textbox2 = Me.ListBox1.List(Me.listbox1.listindex)
Private Sub UserForm_activate() Rem Opsætning af listbox With Me.ListBox1 .ColumnCount = 2 .ColumnWidths = "100;100" End With End Sub
Her siger du når formen bliver activ skal din listbox1 have 2 kollonner og bredden på den skal være 100;100
Ja meget undskyld mine dumme spørgsmål, men er som sagt ny til det og jeg vil gerne lære at forstå det. Det er jo ik særlig fedt at lave noget når man ik ved hvad man laver ;o)
Jeg ved ikke om jeg kommer på mere i aften. Hvis ikke så hører du nok ik fra mig før i morgen eftermiddag kl 16:30 tidligtst.
ER DETTE VBA eller VB6? Hedder de enkelte kontrols de anvendte navne? Kan man anvende Me, hvis ikke VBA?
Private Sub Command1_Click() If Me.Text1 <> "" And Me.Text2 <> "" Then Me.List1.AddItem Me.Text1 Me.List1.List(Me.List1.ListCount - 1) = Me.Text2 Me.Text1 = "" Me.Text2 = "" End If
(Har prøvet at lægge det ind i VBA og korrigere kontrol-navnene = ingen problemer).
LIDT MERE FORKLARING: Rem Eksemplet er skrevet i VBA Rem Userform består af følgende kontrols navngivet default: Rem 2 tekstbokse: TextBox1 & TextBox2 (navn kan evt. ændres i Properties) Rem 1 listeboks: ListBox1 Rem 1 kommandoknap: CommandButton1
Private Sub CommandButton1_Click() 'ADD.knappen Rem betingelse, der skal være tekst i begge tekstbokse Rem ================================================== If Me.TextBox1 <> "" And Me.TextBox2 <> "" Then Me.ListBox1.AddItem Me.TextBox1 'alm. additem
Rem For at få tekstboks2 placeret i samme række, men i kolonne 2 Me.ListBox1.List(Me.ListBox1.ListCount - 1, 1) = Me.TextBox2
Rem Herefter slettes indhold af de2 tekstbokse Me.TextBox1 = "" Me.TextBox2 = "" End If End Sub Private Sub ListBox1_Click() Rem Når der klikkes på listeboksen - kopieres teksten fra rækken Me.TextBox1 = Me.ListBox1 'alm = kolonne 1 Me.TextBox2 = Me.ListBox1.List(Me.ListBox1.ListIndex, 1) 'fra kolonne 2 End Sub Private Sub UserForm_activate() Rem Opsætning af listbox With Me.ListBox1 'vedr. listeboks .ColumnCount = 2 '2 kolonner .ColumnWidths = "100;100" 'hver med bredden 100 (ex.) End With
Rem alternativt Rem ListBox1.ColumnCount = 2 Rem ListBox1.ColumnWidths = "100;100" End Sub
Selvfølgelig min fejl, Jeg glemte at nævne det var i VB6. Og angående om du kan anvende me. JA det ser sådan ud. Har aldrig prøvet det før nu he he. Jeg ville nok have skrevet tekst1.text = hvo du skriver me.tekst1 =
Men det ser ud som om begge dele virker lige godt.
men sådan lige på stående fod kan jeg ikke få det helt til at virke, med at den tilføjer i kolonne nr 2. Den smider dem stadig under hinanden, men jeg har da fundet ud af at jeg da har 2 kolonner så vil da sige det går helt klart i den rigtige retning.
Jeg har også noget VB6 kode som lige præcis gør det som jeg gerne vil prøve at lave selv, men selvom det måske lyder dumt så kan jeg altså ik lige overskue koden med de variabler og functioner som den bruger og så bruger de loop og jeg ved ikke lige til hvad. Så jeg vil prøve at poste den her så kan du jo se om du kan tyde den og så komme med den enendelige rettelse til den kode som du har skrevet som jeg egentlig godt forstår princippet i nu.
Option Explicit
Dim intcolumnWidth(0 To 2) As Byte Dim intNumOfCol As Byte '
Private Sub cmdAddToBox_Click()
Dim strOutput As String Dim intCounter As Byte
For intCounter = 0 To intNumOfCol addcolumn strOutput, txtInput(intCounter), intcolumnWidth(intCounter) Next intCounter List1.AddItem strOutput End Sub
Private Sub addcolumn(strOutput As String, strAdd As String, intcolumn As Byte) Dim intCounter As Byte
strOutput = strOutput + strAdd If Len(strAdd) < intcolumn Then For intCounter = Len(strAdd) To intcolumn - 1 strOutput = strOutput + " " Next intCounter End If End Sub
Private Sub List1_Click()
Dim strTemp As String Dim intCounter As Byte
strTemp = List1.Text
For intCounter = 0 To intNumOfCol txtOutput(intCounter) = Left(strTemp, intcolumnWidth(intCounter))
Do While Right(txtOutput(intCounter), 1) = " " txtOutput(intCounter) = Left(txtOutput(intCounter), Len(txtOutput(intCounter)) - 1) Loop strTemp = Mid(strTemp, intcolumnWidth(intCounter) + 1, Len(strTemp)) Next intCounter
Det håber jeg da så at der er andre som vil, men ind til da vil jeg da prøve lykken at arbejde videre med dit eksempel for jeg tror da du har fat i noget af det rigtige
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.