Springen naar inhoud


- - - - -
VS 2015

Focus Op Control

VS2017

  • Log in a.u.b. om te beantwoorden
Er zijn 4 reacties in dit onderwerp

#1 Tatooine4691

Tatooine4691

    Starting Developer

  • Leden
  • 15 berichten
    Laatst bezocht 08 dec 2018 16:29
  • LocatieNoord-Holland

Geplaatst op 05 juni 2018 - 19:09

Ik heb een formulier met daarop 3 textboxen (textbox1, textbox2, textbox3) en een button.
Wanneer ik nu na starten op de button klik zou ik verwachten dat hij na de eerste If / end if de focus op textbox3 zou zetten.
Dit gebeurt niet en hij doorloopt de tweede if /end if en pas daarna wordt de focus op textbox3 gezet.

wie kan mij helpen om aan te geven wat er niet goed gaat (ben een hobby programmeur) en waarom de focus in de 1e if/end if niet wordt uitgevoerd.

Visual Basic Code:
Public Class Form1


	Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
		Me.Show()
		TextBox1.Focus()
	End Sub

	Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
		If TextBox1.Text = "" Then
			MsgBox("Tekstbox 1 is niet gevuld")
			TextBox3.Focus()
		End If

		If TextBox3.Text = "" Then
			MsgBox("Tekstbox 3 is leeg.", vbOKOnly)
			TextBox2.Text = "Hulp is nodig"
			TextBox3.Focus()
		End If
	End Sub
End Class



#2 Supervos

Supervos

    Guru Developer

  • Leden
  • PipPipPipPipPipPip
  • 1397 berichten
    Laatst bezocht 28 sep 2018 08:35

Geplaatst op 05 juni 2018 - 19:20

Dit heeft te maken met hoe de events in de formulieren worden uitgevoerd. Er is een 'message bus' waarin allerlei events worden geplaatst die voor het formulier moeten worden uitgevoerd. Er kan maar 1 event per keer worden uitgevoerd.

De button-click waar je in zit is al de uitvoering van zo'n event. Het volgende event kan maar pas worden verwerkt als de huidige klaar is.


Tip: dit is ook de oorzaak dat je soms de melding "reageert niet" krijgt. Je huidige code is te lang bezig en zorgt dat de events niet op tijd kunnen worden verwerkt.
Het is mogelijk om het verwerken van deze events te forceren (met behulp van Application.DoEvents) maar dit wordt afgeraden omdat dit voor vreemde effecten kan zorgen.

#3 Dirk Andries

Dirk Andries

    Guru Developer

  • Leden
  • PipPipPipPipPipPip
  • 1092 berichten
    Laatst bezocht
  • LocatieGent

Geplaatst op 06 juni 2018 - 11:37

Bericht bekijkenTatooine4691, op 05 juni 2018 - 19:09, zei:

Ik heb een formulier met daarop 3 textboxen (textbox1, textbox2, textbox3) en een button.
Wanneer ik nu na starten op de button klik zou ik verwachten dat hij na de eerste If / end if de focus op textbox3 zou zetten.
Dit gebeurt niet en hij doorloopt de tweede if /end if en pas daarna wordt de focus op textbox3 gezet.

Dat wordt gewoon wel uitgevoerd.
Alleen zie je het niet.
Bewijs:
Visual Basic Code:
Public Class Form1

	Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
		' Beter dan Focus, ook Select is beter dan Focus
		' Focus is bedoeld als interne method voor eigen controls
		ActiveControl = TextBox1
	End Sub

	Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
		If TextBox1.Text = String.Empty Then
			TextBox1.Text = "TextBox1 empty @ " + DateTime.Now.ToString
			' Beter Select of ActiveControl gebruiken
			TextBox3.Focus()
			Text = "Active Control = " + ActiveControl.Name
			MessageBox.Show("Wait a sec ...")
		End If
		If TextBox3.Text = String.Empty Then
			TextBox2.Text = "Hulp nodig @ " + DateTime.Now.ToString
		Else
			TextBox2.Text = "GEEN hulp nodig @ " + DateTime.Now.ToString
		End If

	End Sub

	Private Sub TextBox3_Enter(sender As Object, e As EventArgs) Handles TextBox3.Enter
		DirectCast(sender, Control).Text = "Entered TextBox3 @ " + DateTime.Now.ToString
	End Sub
End Class


Bijlage  ActiveControl1.png   11,09K   2 downloads

en

Bijlage  ActiveControl2.png   8,98K   2 downloads

#4 Dirk Andries

Dirk Andries

    Guru Developer

  • Leden
  • PipPipPipPipPipPip
  • 1092 berichten
    Laatst bezocht
  • LocatieGent

Geplaatst op 06 juni 2018 - 14:28

Bericht bekijkenSupervos, op 05 juni 2018 - 19:20, zei:

Dit heeft te maken met hoe de events in de formulieren worden uitgevoerd. Er is een 'message bus' waarin allerlei events worden geplaatst die voor het formulier moeten worden uitgevoerd. Er kan maar 1 event per keer worden uitgevoerd.
Messages <> Events.

#5 Tatooine4691

Tatooine4691

    Starting Developer

  • Leden
  • 15 berichten
    Laatst bezocht 08 dec 2018 16:29
  • LocatieNoord-Holland

Geplaatst op 06 juni 2018 - 21:06

@Supervos en Dirk: dank voor de uitleg.
Kijken of ik het nu kan toepassen in de daadwerkelijke applicatie waar ik het nodig heb.





Ook met taq VS 2015, VS2017 voorzien

0 gebruiker(s) lezen dit onderwerp

0 lid(leden), 0 bezoeker(s), 0 anonieme gebruikers

Inloggen


[VS 2015] Untitled 1

Met dank aan J├╝rgen voor de jarenlange inzet van visualbasic.be (anno dec 2000)
Met dank aan Mike en Ronneke voor de jarenlange inzet van vbib.be (anno dec 2010)
Met dank aan PascalBianca voor de jarenlange inzet van vbib.be (anno dec 2016)