|
Categorieën >
VB.NET
Combobox openen en verlaten
|
|
|
offline
|
Lid
|
Hallo Allemaal.
Ik zit met een klein probleempje.
Ik ben een WM 6 formulier in VB 2010 aan het maken met 4 textboxes, 1 combobox, 2 Datetimepickers en een timer.
Om mijn WM 6 formulier goed te laten werken wil ik dat mijn textboxes, combobox en datetimepickers goed op elkaar zijn afgestemd.
Wat ik wil is dat je door heel het WM 6 formulier kunt fietsen met de up/down/right of left toetsen.
Dit gebeurd ook al voor een groot deel.
Ik kan ook gewoon met de enter toets de combobox openen.
Daarna kan ik ook gewoon in de combobox met de up/down en enter toets een land selecteren en in de datetimepicker1 een datum.
Precies zoals ik het wil.
Maar dan!
Wanneer ik in de combobox een land heb geselecteerd zou ik de combobox eigenlijk gewoon weer willen verlaten om met de up/down toets verder te gaan door het formulier. (Net als in de Agenda van WM 6)
Wat er nu gebeurd is dat ik na de selectie in de combobox blijf hangen.
Ik kan niet verder navigeren naar vorige of volgende boxen
Wat ik natuurlijk wel wil. (En wel met behulp van de up/down/right of left toetsen).
Dit zijn mijn codes!
Class code:
Public Class Dropoff_Form
Dim tickTime As DateTime
Public vlag As Boolean = True
Public Class Dropoff_Form Dim tickTime As DateTime Public vlag As Boolean = True
GlobalTimer code:
Private Sub Global_Timer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs)
DateLabel.Text = "" + DateString
TimeLabel.Text = "" + TimeString
End Sub
Private Sub Global_Timer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) DateLabel.Text = "" + DateString TimeLabel.Text = "" + TimeString End Sub
Form code:
Private Sub Form7_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim form7 As New Form
Dim Name As String
Name = ""
DoN_tBox1.Text = Name
Dim AdressAndNo As String
AdressAndNo = ""
DoAnr_tBox1.Text = AdressAndNo
Dim ZipCode As String
ZipCode = ""
DoZip_tBox1.Text = ZipCode
Dim Place As String
Place = ""
DoPl_tBox1.Text = Place
Dim Country As System.Object
Country = "Item"
Me.DoC_cBox1.Items.AddRange(New String() {"Other Country"})
Dim vandaag As Date = Now
DoD_Picker1.Text = vandaag.ToShortDateString
DoT_Picker1.Text = vandaag.ToLongTimeString
End Sub
Private Sub Form7_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim form7 As New Form Dim Name As String Name = "" DoN_tBox1.Text = Name Dim AdressAndNo As String AdressAndNo = "" DoAnr_tBox1.Text = AdressAndNo Dim ZipCode As String ZipCode = "" DoZip_tBox1.Text = ZipCode Dim Place As String Place = "" DoPl_tBox1.Text = Place Dim Country As System.Object Country = "Item" Me.DoC_cBox1.Items.AddRange(New String() {"Other Country"}) Dim vandaag As Date = Now DoD_Picker1.Text = vandaag.ToShortDateString DoT_Picker1.Text = vandaag.ToLongTimeString End Sub
TextBoxes code:
Private Sub DoN_tBox1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles DoN_tBox1.KeyDown
If e.KeyCode = Keys.Up Then SendKeys.Send("+{TAB}")
If e.KeyCode = Keys.Down Then SendKeys.Send("{TAB}")
End if
End Sub
Private Sub DoN_tBox1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles DoN_tBox1.KeyDown If e.KeyCode = Keys.Up Then SendKeys.Send("+{TAB}") If e.KeyCode = Keys.Down Then SendKeys.Send("{TAB}") End if End Sub
ComboBox code:
Private Sub DoC_cBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles DoC_cBox1.KeyPress
If e.KeyChar = Chr(13) And vlag = True Then
SendKeys.Send("{F4}")
vlag = False
Exit Sub
End If
If e.KeyChar = Chr(13) And vlag = False Then
SendKeys.Send("{ESC}")
vlag = True
Exit Sub
End If
End Sub
Private Sub DoC_cBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles DoC_cBox1.KeyPress If e.KeyChar = Chr(13) And vlag = True Then SendKeys.Send("{F4}") vlag = False Exit Sub End If If e.KeyChar = Chr(13) And vlag = False Then SendKeys.Send("{ESC}") vlag = True Exit Sub End If End Sub
Hier gaat het fout.
Eenmaal in de combobox kom ik er na het selecteren van een land niet meer uit.
Eigenlijk zou ik na het selecteren weer gewoon met de up/down toets door het formulier moeten kunnen navigeren.
Dit geld ook voor de Datetimepicker1 en Datetimepicker2.
Datetimepickers1 (datum)code:
If e.KeyCode = Keys.Up Then SendKeys.Send("+{TAB}")
If e.KeyCode = Keys.Down Then SendKeys.Send("{TAB}")
End Sub
If e.KeyCode = Keys.Up Then SendKeys.Send("+{TAB}") If e.KeyCode = Keys.Down Then SendKeys.Send("{TAB}") End Sub
De up/down code staat in de Sub maar er gebeurd niets.
Datetimepickers2 (tijd)code:
Private Sub DoT_Picker1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles DoT_Picker1.KeyDown
If e.KeyCode = Keys.Up Then SendKeys.Send("+{TAB}")
If e.KeyCode = Keys.Down Then SendKeys.Send("{TAB}")
Private Sub DoT_Picker1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles DoT_Picker1.KeyDown If e.KeyCode = Keys.Up Then SendKeys.Send("+{TAB}") If e.KeyCode = Keys.Down Then SendKeys.Send("{TAB}")
Hier gebeurd er na de selectie van de tijd nog iets.
Wanneer ik bv 08:00:00 in toets en op de up/down toets druk, verspringen de laatste 2 nullen naar 59 (dus 08:00:59)
Wie kan mij helpen?!!!
Mvg. Roadrocker66
|
6 antwoorden
|
|
|
|
|
|
offline
|

Crew .NET
|
Waarom zou je dit willen met de pijltjestoetsen? Voor die dingen bestaat er de TAB-toets...  Je kan in je KeyDown-event altijd kijken of er een geselecteerd item is en als er geen is zorg je voor de code dat je een item kan selecteren in je ComboBox en als er wel al een item geselecteerd is en de Up/Down key wordt gebruikt kan je verder navigeren naar andere controls:
'Als de ComboBox niet 'open' staat
If Not ComboBox1.DroppedDown Then
'als er al een item geselecteerd is
If Not ComboBox1.SelectedItem = Nothing Then
e.Handled = True
If e.KeyCode = Keys.Up Then SendKeys.Send("+{TAB}")
If e.KeyCode = Keys.Down Then SendKeys.Send("{TAB}")
Else
'als er geen item geselecteerd is, de ComboBox openen
ComboBox1.DroppedDown = True
End If
End If
'Als de ComboBox niet 'open' staat If Not ComboBox1.DroppedDown Then 'als er al een item geselecteerd is If Not ComboBox1.SelectedItem = Nothing Then e.Handled = True If e.KeyCode = Keys.Up Then SendKeys.Send("+{TAB}") If e.KeyCode = Keys.Down Then SendKeys.Send("{TAB}") Else 'als er geen item geselecteerd is, de ComboBox openen ComboBox1.DroppedDown = True End If End If
Het is waarschijnlijk nog niet de ideale oplossing maar het is misschien al een duwtje in de juiste richting.
|
|
|
|
offline
|
Lid
|
Hallo titjes
Dat was inderdaad niet de oplossing.
Toch bedankt.
Ik heb nu inmiddels al 128 uur op het internet gesurft om het antwoord te vinden en nog steeds niets bruikbaars gevonden.
Iemand anders een suggestie?
|
|
|
|
offline
|

Crew .NET
|
Maar leg me eens uit waarom je niet gewoon gebruik maakt van de TabIndex van elke Control om door je formulier te 'bladeren'?
|
|
|
|
offline
|
Lid
|
Ook
Het wordt een programma voor op een smartphone telefoon.
Ik ben chauffeur en wil graag net als op mijn board computer in de vrachtwagen alle werkzaamheden doormiddel van buttons en invoer registreren.
Dit betekend de laad en los gegevens, de laad en los tijden enz.
Een laad of los formulier heeft diverse textboxen, 1 combobox met landen en 2 datetimepickers
Met de up en down toets wil ik ten aller tijden van boven naar beneden en van beneden naar boven door het formulier kunnen gaan zonder dat er iets gebeurd. (dus ook over de combobox en datetimepickers).
In de combobox staan diverse landen.
Pas wanneer ik op de enter toets druk mag de combobox of datetimepickers openen om een land land of datum of tijd te kunnen selecteren.
Na selectie met de enter toets moet de combobox of datetimepicker als het ware weer gewoon sluiten waarop je weer gewoon naar boven of beneden kunt gaan met de up en down toets.
Door de textboxen gaat prima.(zie textbox code)
Maar wanneer ik bij de combobox aan kom moet ik iets selecteren.
Op zich niet erg.
Maar wanneer ik een land geselecteerd heb kan ik er niet meer uit.
(zie combobox code).
Dit geld ook voor de datetimepickers.
Hoe kan ik de code zo aan passen dat ik zonder dat er iets gebeurd door het formulier kan blijven wandelen met de up en down toetsen?
En hoe kan ik de code zo aan passen dat ik na selectie met de enter toets in de combobox en/of datetimepicker deze gewoon weer verlaten?
(Dat ie als het ware zijn focus verliest).
Hoop dat ik het zo goed heb uit gelegd.
Mvg. Roadrocker66
|
|
|
|
offline
|
   
Grafische Ninja
|
Bovendien is je form load nogal geheugen intensief, verander die best door het volgende :
Private Sub Form7_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.DoC_cBox1.Items.AddRange(New String() {"Other Country"})
DoD_Picker1.Text = Now.ToShortDateString
DoT_Picker1.Text = Now.ToLongTimeString
End Sub
Private Sub Form7_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.DoC_cBox1.Items.AddRange(New String() {"Other Country"}) DoD_Picker1.Text = Now.ToShortDateString DoT_Picker1.Text = Now.ToLongTimeString End Sub
Dit geeft het zelfde resultaat als je al hebt.
|
|
|
|
offline
|

Crew .NET
|
In het KeyEvent kan je als de ComboBox z'n items toont wanneer er op Enter geduwd wordt de Focus op de volgende Control zetten:
'Als de combobox nog niet openstaat
If Not ComboBox1.DroppedDown Then
'als er op de pijl naar beneden geduwd wordt
If e.KeyCode = Keys.Down Then
'combobox openen
ComboBox1.DroppedDown = True
End If
Else
'als er een item geselecteerd is en er wordt op enter geduwd
'volgende control de focus geven
If e.KeyCode = Keys.Enter Then DateTimePicker1.Focus()
End If
'Als de combobox nog niet openstaat If Not ComboBox1.DroppedDown Then 'als er op de pijl naar beneden geduwd wordt If e.KeyCode = Keys.Down Then 'combobox openen ComboBox1.DroppedDown = True End If Else 'als er een item geselecteerd is en er wordt op enter geduwd 'volgende control de focus geven If e.KeyCode = Keys.Enter Then DateTimePicker1.Focus() End If
|
Je moet ingelogd zijn om een reactie te kunnen posten.
|
|
|