Een afb van de array vervangen en de nieuw naam weergeven in een textbox multiline (Vb6)

satriano17

Gebruiker
Lid geworden
30 sep 2012
Berichten
342
Ik heb een array van afbeeldingen waar ik afb upload.
Als ik een afb upload, wordt de titel van die grafiek automatisch
in een lijst in Multiline Text1 geschreven. Mijn vraag is: als ik
een grafiek vervang in een afbeelding van de array, hoe kan ik de
bijbehorende naam in Text1 vervangen? Op dezelfde positie.
Ik heb het uiteraard geprobeerd te oplossen. En is bijna opgelost .

Het enige probleem is dat het de nieuw naam van de vervangen grafiek wordt twee keer dan weergegeven.
in de lijst in textbox multiline.
Hoe kan ik het probleem verbeteren? Dus als ik een nieuw afb laadt
moet de behorend naam 1 keer voorkomen in de lijst in de plaats van de oude naam.
Bedankt
Hier mijn code

Code:
Dim Slash As String
On Error Resume Next
If Right(App.Path, 1) <> "\" Then Slash = "\"
CommonDialog1.InitDir = App.Path & Slash & "Graphics"
CommonDialog1.FileName = App.Path & Slash & "Graphics" & "\*.*"

CommonDialog1.ShowOpen
Image1(Index).Picture = LoadPicture(CommonDialog1.FileName)
Dim a As String
a = CommonDialog1.FileTitle

Text1.Text = Text1.Text & Left$(a, Len(a) - 4) & vbCrLf ' Schrijf naam afb in Text1 Multiline

Dim fileNames() as String
fileNames = Split(Text1.Text, vbCRLF)
Text1.Text = Replace(Text1.Text, fileNames(index), Left$(a, Len(a) - 4))' moet nieuw naam van de afb vervangen.
 
Code die begint met On Error Resume Next zonder verder actie erop doe ik sowieso niks mee.
Errors hoor je op te vangen en af te handelen.
 
Laatst bewerkt:
Ja, Edmor. Maar ook zonder di On error Resume next (ik heb weggedaan ) doe de programma hetzelfde.
Namelijk, als ik een nieuwe afb laadt dan wordt de nieuw naam wel weergegeven in text1 maar de oud niet gewist.
 
Je voegt de naam toe aan Text1 en daarna vervang je ook nog eens de oude door de nieuwe naam, dus staat hij er twee keer in.
Ik neem aan dat je weet of het om een vervanging of toevoeging gaat, dus je voegt toe of je vervangt, dus niet beide.
 
Je voegt de naam toe aan Text1 en daarna vervang je ook nog eens de oude door de nieuwe naam, dus staat hij er twee keer in.
Ik neem aan dat je weet of het om een vervanging of toevoeging gaat, dus je voegt toe of je vervangt, dus niet beide.
Ja AHHulpie.
Gij hebt voolkomen gelijk .
Nu wordt twee keer dezelfde geschreven.

Maar als ik dit wis:

Code:
Text1.Text = Text1.Text & Left$(a, Len(a) - 4) & vbCrLf ' Schrijf naam afb in Text1 Multiline

dan wordt allemaal geen afb naam geschreven in text1.
De oplossing moet dan iets anders in mijn code.
Of moet apart knopen voor invoegen/vervangen. Maar ook dat is moelijk te plaatsen. Daarom wou ik met 1 knop doen.
Blijkbaar kan niet.
 
Laatst bewerkt door een moderator:
Je kunt ook eerst testen of de nieuwe naam al aanwezig is in de textbox:
Code:
If InStr(Text1.Text, Left$(a, Len(a) - 4)) > 0 Then
   'niet toevoegen
Else
   'wel toevoegen
End If
Plaats anders de hele code een hier.
 
Het lijkt me afhankelijk van hoe de variabele a wordt gevuld.
Is dat in een loop?
Probeer het eens zo:
Code:
x = x & Left$(a, Len(a) - 4) & vbCrLf
En dan na de loop:
Code:
Text1.Text = x
Het stukje code dat je plaatste is dus niet voldoende om de oorzaak van je probleem te kunnen zien.
 
Het lijkt me afhankelijk van hoe de variabele a wordt gevuld.
Is dat in een loop?
Probeer het eens zo:
Code:
x = x & Left$(a, Len(a) - 4) & vbCrLf
En dan na de loop:
Code:
Text1.Text = x
Het stukje code dat je plaatste is dus niet voldoende om de oorzaak van je probleem te kunnen zien.
Nee. Geen loop. De stuk code gepost is alles om de plaatjes te laden. E op de form staat nog enkel de textbox multiline. Niks anders. IK ga nu jullie tips testen. Bedankt
 
Je kunt ook eerst testen of de nieuwe naam al aanwezig is in de textbox:
Code:
If InStr(Text1.Text, Left$(a, Len(a) - 4)) > 0 Then
   'niet toevoegen
Else
   'wel toevoegen
End If
Plaats anders de hele code een hier.
Als ik wil veranderen dan is wel aanwezig in de textbox. De probleem is dus dat als ik verande de oude text moet vervangt worden door het nieuw. Als nog niks aanwezig is dan gebeurt niks. Moet niks vervangt worden.
 
IK herhaal hier mijn code . Is alles.

Code:
Dim Slash As String
If Right(App.Path, 1) <> "\" Then Slash = "\"
CommonDialog1.InitDir = App.Path & Slash & "Graphics"
CommonDialog1.FileName = App.Path & Slash & "Graphics" & "\*.*"

CommonDialog1.ShowOpen
Image1(Index).Picture = LoadPicture(CommonDialog1.FileName)
Dim a As String
a = CommonDialog1.FileTitle
Text1.Text = Text1.Text & Left$(a, Len(a) - 4) & vbCrLf ' Schrijf naam afb in Text1 Multiline

Dim fileNames() as String
fileNames = Split(Text1.Text, vbCRLF)
Text1.Text = Replace(Text1.Text, fileNames(index), Left$(a, Len(a) - 4))' moet nieuw naam van de afb vervangen.


Ik heb dus een array van 20 images1
Ik heb nog op het form 1 text1.text Multiline
Als ik een van de 20 plaatje (o allemaal maar moet niet zijn) ) laadt dan wordt de naam weergegeven in text1
Max 20 namen als alle plaatje vol zijn.
Alles ok tot hier.
Als ik nu 1 willekeurig plaatje vervangt dan moet de oorspronkelijk naam verdwijnen e vervangt door de naam van de nieuw plaatje
Op dezelfde plaats van de oude in text1

Dit is de complete code die ik heb.
 
Het is VB6.
Dus wellicht hier je hele project eens plaatsen in een zip bestand.
Om het gemakkelijker en begrijpelijker te maken, heb ik de module met het probleem geëxtraheerd en opnieuw gemaakt. De variabelen en componenten zijn hetzelfde als in mijn programma. Gegarandeerd. Ik heb alleen het betreffende gedeelte genomen en op een nieuw form geplaats. . Hierbij de zip met de code. Ik heb alleeb de graphics vervangt. Maar de bewerking is zelfde.
 

Bijlagen

Declareer een string array met dezelfde lengte als je Image array.
Code:
Dim aFilenamen(8) As String
aFilenamen(Index) = Left$(a, Len(a) - 4)
Text1.Text = ""
For i = 1 To 8
    Text1.Text = Text1.Text & aFilenamen(i) & vbCrLf
Next

Heb VB6 al jaren geleden ingeruild voor Visual Studio Express, dus kan e.e.a. helaas niet testen.
 
Heb VB6 al jaren geleden ingeruild voor Visual Studio Express, dus kan e.e.a. helaas niet testen.

Probeer het eens met een array van textboxen even lang als je Image1 array.
En dan zoiets als Text1(Index).Text = Left$(a, Len(a) - 4)
 
Haal in edit mode de standaard tekst uit het object Text1 weg en gebruik dan deze code:
Code:
Private Sub Image1_Click(Index As Integer)
    If Right(App.Path, 1) <> "\" Then Slash = "\"
    With CommonDialog1
        .InitDir = App.Path & Slash & "Graphics"
        .FileName = App.Path & Slash & "Graphics" & "\*.*"
        .ShowOpen
    End With
   
    Image1(Index).Picture = LoadPicture(CommonDialog1.FileName)
    a = CommonDialog1.FileTitle
    Text1.Text = Text1.Text & Left$(a, Len(a) - 4) & vbCrLf ' Schrijf naam afb in Text1 Multiline
End Sub
 
@edmoor
Als TS nu een afbeelding in een van de elementen van zijn Image array vervangt door een nieuwe afbeelding wordt de oude naam in Text1.Text niet vervangen door de nieuwe?
 
Klopt. De oude naam blijft bestaan.
Bij deze het gewijzigde projext.
Dubbelklik op Project1.exe:
 

Bijlagen

Laatst bewerkt:
Terug
Bovenaan Onderaan