login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Combobox openen en verlaten

Offline Roadrocker66 - 30/01/2011 21:00
Avatar van Roadrocker66Lid 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:
  1. Public Class Dropoff_Form
  2. Dim tickTime As DateTime
  3. Public vlag As Boolean = True


GlobalTimer code:
  1. Private Sub Global_Timer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs)
  2. DateLabel.Text = "" + DateString
  3. TimeLabel.Text = "" + TimeString
  4. End Sub


Form code:
  1. Private Sub Form7_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  2.  
  3. Dim form7 As New Form
  4.  
  5. Dim Name As String
  6. Name = ""
  7. DoN_tBox1.Text = Name
  8.  
  9. Dim AdressAndNo As String
  10. AdressAndNo = ""
  11. DoAnr_tBox1.Text = AdressAndNo
  12.  
  13. Dim ZipCode As String
  14. ZipCode = ""
  15. DoZip_tBox1.Text = ZipCode
  16.  
  17. Dim Place As String
  18. Place = ""
  19. DoPl_tBox1.Text = Place
  20.  
  21. Dim Country As System.Object
  22. Country = "Item"
  23. Me.DoC_cBox1.Items.AddRange(New String() {"Other Country"})
  24.  
  25. Dim vandaag As Date = Now
  26. DoD_Picker1.Text = vandaag.ToShortDateString
  27. DoT_Picker1.Text = vandaag.ToLongTimeString
  28.  
  29. End Sub


TextBoxes code:
  1. Private Sub DoN_tBox1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles DoN_tBox1.KeyDown
  2. If e.KeyCode = Keys.Up Then SendKeys.Send("+{TAB}")
  3. If e.KeyCode = Keys.Down Then SendKeys.Send("{TAB}")
  4. End if
  5. End Sub


ComboBox code:
  1. Private Sub DoC_cBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles DoC_cBox1.KeyPress
  2. If e.KeyChar = Chr(13) And vlag = True Then
  3. SendKeys.Send("{F4}")
  4. vlag = False
  5. Exit Sub
  6. End If
  7.  
  8. If e.KeyChar = Chr(13) And vlag = False Then
  9. SendKeys.Send("{ESC}")
  10. vlag = True
  11. Exit Sub
  12. End If
  13. 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:
  1. If e.KeyCode = Keys.Up Then SendKeys.Send("+{TAB}")
  2. If e.KeyCode = Keys.Down Then SendKeys.Send("{TAB}")
  3. End Sub


De up/down code staat in de Sub maar er gebeurd niets.

Datetimepickers2 (tijd)code:


  1. Private Sub DoT_Picker1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles DoT_Picker1.KeyDown
  2. If e.KeyCode = Keys.Up Then SendKeys.Send("+{TAB}")
  3. 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

Gesponsorde links
Offline Abbas - 30/01/2011 22:22
Avatar van Abbas Gouden medaille

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:

  1. 'Als de ComboBox niet 'open' staat
  2. If Not ComboBox1.DroppedDown Then
  3. 'als er al een item geselecteerd is
  4. If Not ComboBox1.SelectedItem = Nothing Then
  5. e.Handled = True
  6. If e.KeyCode = Keys.Up Then SendKeys.Send("+{TAB}")
  7. If e.KeyCode = Keys.Down Then SendKeys.Send("{TAB}")
  8. Else
  9. 'als er geen item geselecteerd is, de ComboBox openen
  10. ComboBox1.DroppedDown = True
  11. End If
  12. End If

Het is waarschijnlijk nog niet de ideale oplossing maar het is misschien al een duwtje in de juiste richting. 
Offline Roadrocker66 - 01/02/2011 20:45
Avatar van Roadrocker66 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 Abbas - 01/02/2011 21:44
Avatar van Abbas Gouden medaille

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 Roadrocker66 - 02/02/2011 06:25
Avatar van Roadrocker66 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 Ontani - 02/02/2011 09:36
Avatar van Ontani Gouden medailleGouden medailleGouden medailleGouden medaille

-1
Bovendien is je form load nogal geheugen intensief, verander die best door het volgende :

  1. Private Sub Form7_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  2.  
  3. Me.DoC_cBox1.Items.AddRange(New String() {"Other Country"})
  4.  
  5. DoD_Picker1.Text = Now.ToShortDateString
  6. DoT_Picker1.Text = Now.ToLongTimeString
  7.  
  8. End Sub


Dit geeft het zelfde resultaat als je al hebt.
Offline Abbas - 02/02/2011 12:52
Avatar van Abbas Gouden medaille

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:

  1. 'Als de combobox nog niet openstaat
  2. If Not ComboBox1.DroppedDown Then
  3. 'als er op de pijl naar beneden geduwd wordt
  4. If e.KeyCode = Keys.Down Then
  5. 'combobox openen
  6. ComboBox1.DroppedDown = True
  7. End If
  8. Else
  9. 'als er een item geselecteerd is en er wordt op enter geduwd
  10. 'volgende control de focus geven
  11. If e.KeyCode = Keys.Enter Then DateTimePicker1.Focus()
  12. End If
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.245s