Black Friday = Pricewatch Bekijk onze selectie van de beste Black Friday-deals en voorkom een miskoop.

[VB] data uit runtime besturingselement

Pagina: 1
Acties:

  • snader2
  • Registratie: Juni 2008
  • Laatst online: 15-11 06:53
Ik laat vb een besturingselement genereren met de volgende code:
code:
1
2
3
4
5
6
7
Private Sub CommandButton1_Click()
        
        Set NewTextBox = UserForm1.Controls.Add("Forms.textbox.1")
        With NewTextBox
            .Name = "MyText1"
         End With
End Sub


Maar krijg het niet voor elkaar de data daaruit te lezen heb al van alles geprobeerd maar niks lukt. Hoop dat iemand me daarbij kan helpen. Ben overigens wel een noob op dit gebied.

Verwijderd

je hebt een probleem met het lezen van de data uit de textbox, maar je post de code waar je dit probeert niet...

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 00:18

Creepy

Tactical Espionage Splatterer

"van alles geprobeerd". Wees eens wat concreter want mijn glazen bol is stuk ;)
Dus wat heb je precies geprobeerd? Wat lukte daar dan precies niet mee? Kreeg je foutmeldingen? . Zie ook Programming Beleid - De Quickstart

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • snader2
  • Registratie: Juni 2008
  • Laatst online: 15-11 06:53
code:
1
2
3
4
5
6
7
8
9
10
11
Private Sub CommandButton2_Click()
 Set NewLabel = UserForm1.Controls.Add("Forms.label.1")
        With NewLabel
            .Name = "FieldLabel"
            .Caption = **vul hier iets in**
            .Top = 50
            .Left = 50
            .Width = 150
            .Height = 12
        End With
End Sub


en bij vul iets in heb ik onder andere geprobeerd:
.MyTextBox1.Value
MyTextBox1.Text
MyTextBox.Text
Textbox1.Text

maar niks werkt er tot nu toe terwijl als ik een normaal tekstbox invoeg via de object editor en vb die de naam textbox1 meegeeft ik die zo uit kan lezen met TextBox1.Text.

error die ik dus krijg is 438(de eigenschap of methode wordt niet ondersteund door dit object).

[ Voor 7% gewijzigd door snader2 op 21-10-2008 12:24 ]


  • Sikkek
  • Registratie: Maart 2004
  • Laatst online: 18:09
Je voegt een nieuwe textbox toe als variabele 'NewTextBox', als je dus de text van dat control wilt hebben, moet je ernaar verwijzen m.b.v. NewTextBox.Text

Ik ga er dan maar even vanuit dat je NewTextBox op class niveau hebt gedefinieerd en dat je CommandButton1_Click eerst uitvoert (anders is NewTextBox nog null/nothing)

  • urk_forever
  • Registratie: Juni 2001
  • Laatst online: 14-11 22:24
Wil je dynamisch controls toevoegen aan je form? Dit is in VB6 namelijk niet zo eenvoudig voor zover ik weet.

Hail to the king baby!


  • snader2
  • Registratie: Juni 2008
  • Laatst online: 15-11 06:53
Ja ik voeg dus controls toe in de runtime en wil door het drukken op een button deze waarde gebruiken. Nu gebruik ik even een label maar dat is straks niet de bedoeling.

@sikkek ik zal eens even controleren maar volgens mij had ik dat al geprobeerd.

edit werkt ook niet.

de complete code is:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Private Sub CommandButton1_Click()
        
        Set NewTextBox = UserForm1.Controls.Add("Forms.textbox.1")
        With NewTextBox
            .Name = "MyText1"
         End With
End Sub

Private Sub CommandButton2_Click()
 Set NewLabel = UserForm1.Controls.Add("Forms.label.1")
        With NewLabel
            .Name = "FieldLabel"
            .Caption = NewTextBox.Tekst
        
            .Top = 50
            .Left = 50
            .Width = 150
            .Height = 12
        End With
End Sub


en mijn form is gewoon een leeg venster met 2 buttons.

[ Voor 57% gewijzigd door snader2 op 21-10-2008 12:52 ]


  • urk_forever
  • Registratie: Juni 2001
  • Laatst online: 14-11 22:24
Hoe ziet je form code eruit? Dus alle code ipv alleen deze 2 subs

Hail to the king baby!


  • urk_forever
  • Registratie: Juni 2001
  • Laatst online: 14-11 22:24
Om events te krijgen van dynamische controls in VB6 moet je ze in je form boven aan declareren dmv:

Visual Basic 6:
1
private withevents Textbox1 as Textbox


Vervolgens kan je jouw code gebruiken om de text uit te lezen. Het zijn dus niet echt dynamische controls. Je zou hier een control array voor kunnen gebruiken om dit toch voor elkaar te krijgen.

Of je zou over de Controls collectie van je form heen kunnen lopen en naar de naam van de controls kijken en die gebruiken.

Zie ook deze links:

http://forums.devx.com/showthread.php?t=157155
http://www.codeguru.com/v...activex/article.php/c3499

[ Voor 13% gewijzigd door urk_forever op 21-10-2008 12:56 ]

Hail to the king baby!


  • Sikkek
  • Registratie: Maart 2004
  • Laatst online: 18:09
NewTextBox.Tekst gaat natuurlijk niet werken. NewTextBox.Text wellicht wel...

Post inderdaad even de hele code van je form.

Overigens, hebben we het hier over VB.Net of VB6?

@urk_forever: wie heeft het hier over events?

[ Voor 29% gewijzigd door Sikkek op 21-10-2008 12:58 ]


  • snader2
  • Registratie: Juni 2008
  • Laatst online: 15-11 06:53
ja stom typefoutje maar lost niks op. Het gaat om VBA

  • Sikkek
  • Registratie: Maart 2004
  • Laatst online: 18:09
Begin dan eens met Option Explicit bovenaan je code te zetten en alle variabelen netjes te 'dimmen'. Op die manier weet je zeker wat de scope van je variabele is dus:
Visual Basic .NET:
1
2
Option Explicit
Dim NewTextbox as TextBox;

(even uit het hoofd)

Dan kun je later die NewTextBox en zijn properties benaderen.

EDIT: Even getest, het moet dan werken (wel even je label in de tweede buttonclick definieren....)

[ Voor 13% gewijzigd door Sikkek op 21-10-2008 13:11 ]


  • snader2
  • Registratie: Juni 2008
  • Laatst online: 15-11 06:53
Sikkek ik heb het geprobeerd maar ik zal wel zo noobisch zijn want krijg het niet werkend.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Option Explicit
Private Sub CommandButton1_Click()

Dim NewTextbox As TextBox
        Set NewTextbox = UserForm1.Controls.Add("Forms.textbox.1")
        With NewTextbox
            .Name = "MyText1"
        End With
End Sub

Private Sub CommandButton2_Click()
Dim NewLabel As Label

 Set NewLabel = UserForm1.Controls.Add("Forms.label.1")
        With NewLabel
            .Name = "FieldLabel"
            .Caption = NewTextbox.Text
        
            .Top = 50
            .Left = 50
            .Width = 150
            .Height = 12
        End With
End Sub

  • Sikkek
  • Registratie: Maart 2004
  • Laatst online: 18:09
Nu kom je een beetje in de richting. Wat nu belangrijk is, is de scope van je variabele NewTextBox. Je definieert NewTextBox nu in CommandButton1_Click() terwijl je hem in CommandButton2_Click() wilt gebruiken. Dat kan niet, want buiten de procedure is NewTextBox niet bekend. (als je de code compileert zou je al een foutmelding krijgen). Wat je dus moet doen is de NewTextBox BUITEN CommandButton1_Click() definieren, bijvoorbeeld direct onder Option Explicit

  • snader2
  • Registratie: Juni 2008
  • Laatst online: 15-11 06:53
jippy hij werkt. Echt kei bedankt voor je hulp Sikkek.

  • snader2
  • Registratie: Juni 2008
  • Laatst online: 15-11 06:53
Kom nu bij een volgend probleempje

Wil het genereren in een while loopje doen van de checkbox lijst dit ziet er als volgt uit:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
i = 0
Do While Not Rs.EOF
i = i + 1
'checkbox
        Set NewCheckBox = MultiPage1.Page2.Controls.Add("Forms.checkbox.1")
        With NewCheckBox
            .Name = "MyCheck" & i + 1
            .Caption = ""
            .Top = 0 + (18 * k)
            .Left = s
            .Width = 12
            .Height = 12
        End With
    Rs.MoveNext
    Loop

en de code om te kijken welke checkboxen zijn ingevuld
code:
1
2
3
4
5
    For l = 1 To i
        If NewCheckBox & i & .Value = True Then
        MsgBox (l)
        End If
    Next


Nu vraag ik me alleen af hoe ik het netst dus een i aantal checkboxes gelabeld krijg. Moet ik dan i x Set NewCheckBox doen? dus iets als
Set NewCheckBox & i = .......
Want dat werkt niet echt.
Of kan ik ze ook selecteren op caption? Want die geeft hij nu al wel mooi mee.

  • Sikkek
  • Registratie: Maart 2004
  • Laatst online: 18:09
Je kunt controls op je form ophalen met UserForm1.Controls.Item(itemnaam). Voor de rest verwijs ik je nu naar de help van Office en het internet :)
Pagina: 1