Toon posts:

[VB6 listview setfocus]Krijg de focus niet op de listview.

Pagina: 1
Acties:
  • 101 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik heb een formulier met een boel controls en 1 daarvan is een listview. Met de tab-toets kom ik niet bij mijn listview (waarom weet ik ook niet) en ik dacht dat op te lossen door via een toets (Form_KeyDown) alsnog de focus te zetten.

Hier is mijn code:
code:
1
2
3
4
5
6
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
  If KeyCode = vbKeyPageDown Then
    'Zet focus op listview
    Me.ListView(1).SetFocus
  End If
End Sub


Dit resulteerd in de volgende foutmelding:
Run time error '5':
Invalid procedure call or argument

Uiteraard heb ik hier en via Google al gezocht maar ik kan niets vinden wat de foutmelding verklaart of het probleem oplost.

Moet ik misschien in mijn listview een property wijzigen?

Alvast bedankt.

Verwijderd

Waarom staat de 1 tussen haakjes ? Moet het niet listview1.setfocus zijn ?

Verwijderd

Topicstarter
@FFrenzy:
De 1 staat tussen haakjes omdat het index 1 is. Ik maak nl. run-time de controls aan.

Verwijderd

probeer dit eens
code:
1
2
me.setfocus
listview(1).setfocus


Ik heb het probleem ook wel eens gehad en toen moest ik zorgen dat het formulier eerst de focus kreeg. beetje onlogisch dat wel.

Ik neem aan dat je keypreview van je formulier ook aan staan ?

[ Voor 60% gewijzigd door Verwijderd op 15-10-2004 11:53 . Reden: kleine toevoeging ]


Verwijderd

Topicstarter
@bromaster:
Dat resulteert in dezelfde foutmelding.
Lijkt me ook logisch omdat het formulier al de focus had (form_keydown event) en jou code verder gelijk is aan de mijne.
Toch bedankt voor het meedenken. Misschien heb je nog een optie? ;)

Verwijderd

Ik hoef je denk ik niet te vragen of je listview listview heet en of je index op 1 staat ?

Verwijderd

Je hebt de .Enabled = True property goed staan voor je listview?

Verwijderd

Topicstarter
Alles staat aan.
Ik kan de listview ook gewoon benaderen. Ik heb er code achterzitten dat als ik dubbelklik (of met de enter toets) een rij selecteer, een nieuw formulier wordt geopend waar de gegevens van die rij in staan zodat ze eenvoudig zijn te wijzigen. Als ik op een knop klik in dit nieuwe formulier, worden de wijzigingen doorgevoerd in de listview en wordt het (nieuwe) formulier gesloten.
Op dat moment is de listview zijn focus kwijt en heb ik er niets aan dat ik met mijn toetsenbord door mijn listview kan 'scrollen' en met enter een rij kan wijzigen. Ik moet nl. met mijn muis de listview focus geven, dan kan ik net zo goed gelijk dubbelklikken op de rij die ik wil wijzigen.
Daarom wil ik na het sluiten van het (nieuwe) formulier de listview de focus geven of als work-around wil ik als ik een specifieke toets gebruik de listview de focus geven.

Verwijderd

Alles, dus ook je .tabstop = true ?

Anders zou ik het ook niet weten, behalve dan dat je niet de laatste service pack van vbasic 6 gebruikt.

Verwijderd

Topicstarter
@efitskie:

Ook .tabstop = true

Ik gebruik VB6 met servicepack 6, dat is toch de nieuwste ?

Verwijderd

Plaats anders hier eens het relevante gedeelte uit het desbetreffende .frm bestand. Misschien dat we daar iets aan kunnen zien.

Verwijderd

Topicstarter
Ok
code:
1
2
3
4
5
6
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
  If KeyCode = vbKeyPageDown Then
    'Zet focus op listview
    Me.ListView(1).SetFocus 'deze regel geeft de foutmelding
  End If
End Sub

code:
1
2
3
4
5
6
7
8
Private Sub ListView_DblClick(index As Integer)
  ListView(index).SelectedItem.Selected = True
  ListView(index).SelectedItem.Bold = True
  'open nieuw formulier met de gegevens van selected item:
  Call ReadSelectedRowFromListView(ListView(index).SelectedItem, _
    ListView(index).ColumnHeaders, WIJZIGCAPTION)
  Set frmFormules.g_Listview = ListView(index)
End Sub

code:
1
2
3
4
5
6
7
8
9
10
11
Private Sub ListView_KeyDown(index As Integer, KeyCode As Integer, _
Shift As Integer)
  Select Case KeyCode
  Case vbKeyReturn
    ListView_DblClick index
  Case vbKeyInsert
    mnuListviewToevoegen_Click
  Case vbKeyDelete
    mnuListviewVerwijderen_Click
  End Select
End Sub

code:
1
2
3
4
5
6
7
8
Private Sub ListView_MouseUp(index As Integer, Button As Integer, _ 
Shift As Integer, X As Single, Y As Single)
  If Button = vbRightButton Then
    'bewaar index voor later:
    g_iListviewIndex = index
    Me.PopupMenu mnuPopupListview
  End If  
End Sub

code:
1
2
3
4
5
6
7
8
9
10
11
12
Private Sub mnuListviewToevoegen_Click()
Dim newListviewItem As ListItem

  'Maak eerst een nieuw listitem:
  Set newListviewItem = Me.ListView(g_iListviewIndex).ListItems.add(, , "_nieuw")
  newListviewItem.Selected = True

  'open nieuw formulier met de gegevens van selected item:  
  Call ReadSelectedRowFromListView(newListviewItem, _
    ListView(g_iListviewIndex).ColumnHeaders, TOEVOEGCAPTION)
  Set frmFormules.g_Listview = ListView(g_iListviewIndex)
End Sub


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Private Sub mnuListviewVerwijderen_Click()
Dim lstSelectedItem As ListItem

  Set lstSelectedItem = Me.ListView(g_iListviewIndex).SelectedItem
  If MsgBox( _
    "Weet je zeker dat je deze hele formule [" & lstSelectedItem & _
    "] wilt verwijderen", vbYesNo + vbQuestion, _
    "Formule verwijderen?") = vbYes Then
    Me.ListView(g_iListviewIndex).ListItems.Remove (lstSelectedItem.index)
  End If
  
  'Opruimen:
  Set lstSelectedItem = Nothing
End Sub

code:
1
2
3
Private Sub mnuListviewWijzigen_Click()
  ListView_DblClick g_iListviewIndex
End Sub


Hopelijk hebben jullie er wat aan, want ik weet het niet meer.
8)7

[ Voor 6% gewijzigd door Verwijderd op 15-10-2004 13:37 . Reden: Aanpassen lay-out ]


Verwijderd

Ik bedoelde eigenlijk de definitie van je control in je .frm bestand, niet de code.
Als je dat bestand in een gewone tekst-editor opent, dan staat bovenin de definitie van de controls. Zoek daar het je listview ( begin..... end.... ) en plaats dat eens hier.

Verwijderd

Topicstarter
Dat had ik niet begrepen.
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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
    Begin MSComctlLib.ListView ListView 
         DragIcon        =   "frmXML.frx":3FED
         Height          =   4815
         Index           =   0
         Left            =   120
         TabIndex        =   10
         ToolTipText     =   "F12 om formule toe te voegen"
         Top             =   120
         Visible         =   0   'False
         Width           =   6615
         _ExtentX        =   11668
         _ExtentY        =   8493
         View            =   3
         LabelEdit       =   1
         LabelWrap       =   -1  'True
         HideSelection   =   0   'False
         FlatScrollBar   =   -1  'True
         FullRowSelect   =   -1  'True
         GridLines       =   -1  'True
         PictureAlignment=   4
         _Version        =   393217
         ForeColor       =   -2147483640
         BackColor       =   -2147483643
         BorderStyle     =   1
         Appearance      =   1
         NumItems        =   13
         BeginProperty ColumnHeader(1) {BDD1F052-858B-11D1-B16A-00C0F0283628} 
            Object.Tag             =   "Raw"
            Text            =   "Raw"
            Object.Width           =   2540
         EndProperty
         ...
         BeginProperty ColumnHeader(13) {BDD1F052-858B-11D1-B16A-00C0F0283628} 
            SubItemIndex    =   12
            Object.Tag             =   "NumDec"
            Text            =   "decimaalGemiddelde"
            Object.Width           =   2540
         EndProperty
         Picture         =   "frmXML.frx":442F
      End

Verwijderd

code:
1
Visible         =   0   'False


je listview is niet zichtbaar ? zou dat misschien de schuldige zijn ?

Verwijderd

Topicstarter
In mijn tweede post vertelde ik al dat ik gebruik maak van een index omdat ik de controls tijdens run-time aanmaak op basis van de eerste (index=0) tijdens design-time gemaakte.
Die eerste moet dan dus niet zichtbaar zijn. Na het aanmaken in run-time van, in dit geval, de tweede (index=1) maak ik het zichtbaar.
In mijn post van 12:20 heb ik al aangegeven dat ik tijdens run-time de listview prima kan benaderen, zolang ik het maar met de muis doe. Ik kan het niet via het toetsenbord doen, omdat ik de focus niet op de listview kan zetten.

Mocht je nog andere suggesties hebben dan hoor ik het graag.

  • Sponge
  • Registratie: Januari 2002
  • Laatst online: 18-05 23:41

Sponge

Serious Game Developer

hm, En als je dan op de eerste listitem van de listview de focus (selected = true ofzo?) zet? :)

Verwijderd

Topicstarter
@Sponge:
Dat had ik al geprobeerd. Daar krijg ik geen fout op maar ik krijg ook niet de focus op de listview.

Verwijderd

Topicstarter
Ik ga nu naar huis. Maandag wel weer verder.
Iedereen bedankt voor de hulp en prettig weekend.
Pagina: 1