Hi,
ich habe eine ScrollBar
Mit diesem Schieberegler befülle ich eine TextBox
In der Ereignisprozedur
Da die Verarbeitung sehr aufwendig ist, darf das erst ausgelöst werden, wenn die ScrollBar nicht mehr angeklickt ist. Deshalb gibt es ein Flag
Die Ereignisroutinen
Allein die Routinen feuern wie erwartet.
Damit wird der aktuelle Wert der ScrollBar korrekt im Feld
Aber die Aktion (in diesem Fall testhalber nur
Außerdem muss ich einen "müden Trick" verwenden, um die Aktion
Das sieht mir nicht gerade nach einer optimalen Handhabung aus. Deshalb meine Fragen:
Wie erreiche ich, dass meine Routine bereits beim
Ist mein Trick mit dem angehängten Blank Stand der Technik oder geht das eleganter ?
Mein Problem wird wohl nicht ganz so neu sein. Ich bin mir sicher dass jemand weiß, wie man solche Aufgaben besser löst !
LG
Peter
ich habe eine ScrollBar
HSegmentScrollBar
. Mit diesem Schieberegler befülle ich eine TextBox
txtCurrentSegment
In der Ereignisprozedur
txtCurrentSegment_TextChanged
soll dann das ausgewählte Segment verarbeitet werden. Da die Verarbeitung sehr aufwendig ist, darf das erst ausgelöst werden, wenn die ScrollBar nicht mehr angeklickt ist. Deshalb gibt es ein Flag
blnDisaTextChanged
mit dem man die Routine temporär ausschalten kann. So habe ich das versucht: VB.NET-Quellcode
- Private Sub HSegmentScrollBar_KeyPress(sender As Object, e As KeyPressEventArgs) Handles HSegmentScrollBar.KeyPress
- blnDisaTextChanged = True 'does not fire
- End Sub
- Private Sub HSegmentScrollBar_KeyUp(sender As Object, e As KeyEventArgs) Handles HSegmentScrollBar.KeyUp
- blnDisaTextChanged = False 'does not fire
- End Sub
- Private Sub HSegmentScrollBar_MouseDown(sender As Object, e As MouseEventArgs) Handles HSegmentScrollBar.MouseDown
- blnDisaTextChanged = True 'does not fire
- End Sub
- Private Sub HSegmentScrollBar_MouseUp(sender As Object, e As MouseEventArgs) Handles HSegmentScrollBar.MouseUp
- blnDisaTextChanged = False 'does not fire
- End Sub
- Private Sub HSegmentScrollBar_ValueChanged(sender As Object, e As EventArgs) Handles HSegmentScrollBar.ValueChanged
- txtCurrentSegment.Text = HSegmentScrollBar.Value.ToString("n0") & " " 'Accept new value, append an additional space
- End Sub
- Private Sub HSegmentScrollBar_MouseEnter(sender As Object, e As EventArgs) Handles HSegmentScrollBar.MouseEnter
- blnDisaTextChanged = True 'Disable routine
- End Sub
- Private Sub HSegmentScrollBar_MouseLeave(sender As Object, e As EventArgs) Handles HSegmentScrollBar.MouseLeave
- blnDisaTextChanged = False 'Reenable routine
- txtCurrentSegment.Text = txtCurrentSegment.Text.Trim() 'Remove addition space to trigger TextChanged event
- End Sub
- Dim blnDisaTextChanged As Boolean = True
- Private Sub txtCurrentSegment_TextChanged(sender As Object, e As EventArgs) Handles txtCurrentSegment.TextChanged
- If blnDisaTextChanged Then Exit Sub
- MessageBox.Show(txtCurrentSegment.Text)
- End Sub
Die Ereignisroutinen
KeyPress, KeyUp, MouseDown, MouseUp
werden nicht ausgelöst ! Die sind also für die Katz ! Warum auch immer ! Allein die Routinen feuern wie erwartet.
Damit wird der aktuelle Wert der ScrollBar korrekt im Feld
txtCurrentSegement
abgebildet. Aber die Aktion (in diesem Fall testhalber nur
Messagebox.Show(...)
) wird erst ausgelöst, wenn der MouseCursor das Control verlässt. Das ist ein bissl "gewöhnungsgedürftig" und nicht gerade user friendly ! Außerdem muss ich einen "müden Trick" verwenden, um die Aktion
txtCurrentSegement_TextChanged
auszulösen. Ich hänge an die Textbox immer ein Blank an und das entferne ich dann mit .Trim um das Changed Event zu erhalten. Das sieht mir nicht gerade nach einer optimalen Handhabung aus. Deshalb meine Fragen:
Wie erreiche ich, dass meine Routine bereits beim
MouseUp
aktiviert wird ?Ist mein Trick mit dem angehängten Blank Stand der Technik oder geht das eleganter ?
Mein Problem wird wohl nicht ganz so neu sein. Ich bin mir sicher dass jemand weiß, wie man solche Aufgaben besser löst !
LG
Peter
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Peter329“ ()