Avatar billede mega-hawk Nybegynder
11. august 2009 - 19:38 Der 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.

På forhånd mange tak.
Avatar billede mega-hawk Nybegynder
11. august 2009 - 20:30 #1
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
Avatar billede supertekst Ekspert
11. august 2009 - 22:17 #2
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
Avatar billede supertekst Ekspert
12. august 2009 - 17:45 #3
Kunne dette bruger?
Avatar billede mega-hawk Nybegynder
12. august 2009 - 17:50 #4
Nå så kom jeg endelig hjem fra arbejde.
Har lige haft 2 min til at prøve det her.
Og her kommer det så.

ved
Private Sub UserForm_activate()
Rem Opsætning af listbox
    With Me.ListBox1
        .ColumnCount = 2
        .ColumnWidths = "100;100"
    End With
End Sub

melder den fejl ved Columncount og ved ik lige hvad der er galt der?

Og så et hurtig spørgsmål til With hvad laver den?
Og så me. noget... Har set den mange gange, men hvad er den egentlig til?
Avatar billede supertekst Ekspert
12. august 2009 - 18:01 #5
With Me.Listbox1 betyder at der efterfølgende kan refereres hertil ved hjælp af "." - altså i stedet for at skulle skrive:

Listbox1.ColumnCount o.s.v.

Me relaterer til Userformen
Avatar billede mega-hawk Nybegynder
12. august 2009 - 20:01 #6
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.
Avatar billede supertekst Ekspert
12. august 2009 - 23:18 #7
Ok - skal prøve at formulere svar inden da...
Avatar billede supertekst Ekspert
13. august 2009 - 11:12 #8
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
Avatar billede mega-hawk Nybegynder
13. august 2009 - 17:27 #9
Javel ja nu blev jeg da lidt klogere ;o)

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 Form_Load()
intcolumnWidth(0) = 20
intcolumnWidth(1) = 10
intcolumnWidth(2) = 20

intNumOfCol = 2
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

End Sub
Avatar billede supertekst Ekspert
13. august 2009 - 18:19 #10
Jeg tror andre må bidrage...
Avatar billede mega-hawk Nybegynder
13. august 2009 - 18:30 #11
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
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