PDA

Vollständige Version anzeigen : Felder aktualisieren (welches Ereignis?)


Joachim Hofmann
09.07.2001, 11:21
Hallo,

Ich habe einige Felder die in 2 Spalten organisiert sind. (Abbildung)
Links DM, Rechts Euro. Unten steht noch jeweils die Summe.
Jedes Währungsfeld soll mit seinem horizontalen *Nachbarn* korrespondieren.
Wenn ich also in z.B txtDM1 was eingebe, soll in txtEuro1 der Euro-Wert stehen, (und umgekehrt)
und sich die beiden Summen unten aktualisieren.

txtDM1 txtEuro1
txtDM2 txtEuro2
txtDM3 txtEuro3
txtDM4 txtEuro4
================
SummeDM SummeEuro

Problem nur: Ich hätte das am liebsten so, das bei *jedem einzelnen* Tastendruck, also, jeder einzelnen Ziffer, die eingeben wird, sich das ganze aktualisiert.
Ich habe mit verschiedenen Ereignissen wie Keyup, BeiÄnderung,... experimentiert, aber diese Ereignissse treten scheinbar nicht garantiert jedesmal auf, jedenfalls werden meine Werte nicht bei *jedem Tastendruck* aktualisiert.

Hat jemand eine Idee?

WAG
09.07.2001, 11:47
die Ereignisse treten schon auf. Du mußt nur mit Me.Refresh die Anzeige nach Änderungen aktualisieren.

Dieter

Joachim Hofmann
09.07.2001, 12:40
Das verstehe ich nicht, wenn ich also Formular.Refresh benutze kann ich nicht mehr als 1 (eine) Ziffer eingeben. Die vorige wird überschrieben. Außerdem aktualisiert sich das Korrespondenzfeld erst beim *zweiten* eingeben einer Ziffer.


z.B.
Private Sub txtDM1_KeyUp(KeyCode As Integer, Shift As Integer)
txtEuro1.value = txtDM1.value / Faktor
Me.Refresh
End Sub

oder auch:


Private Sub txtDM1_KeyPress(KeyAscii As Integer)
txtEuro1.value = txtDM1.value / Faktor
Me.Refresh
End Sub

Kurt aus Kienitz
09.07.2001, 13:25
Hallo auch,

Also mit folgendem Code bin ich soweit, daß der Eurobetrag bei jedem Tastendruck errechnet und angezeigt wird.

Private Sub txtDM01_KeyPress(KeyAscii As Integer)

Dim AktVal As String

If IsNumeric(Chr$(KeyAscii)) Then

If Not IsNull(Me.txtDM01) Then
AktVal = Str$(Me.txtDM01) & Chr$(KeyAscii)
Else
AktVal = Chr$(KeyAscii)
End If

Me.txtDM01.Value = AktVal
Me.txtEuro01 = AktVal / 2


End If

End Sub

Problem war, daß beim ..._KeyPress() das Zeichen noch nicht im DM-Textfeld enthalten ist. Muß man sich also selber drum kümmern.

Bleibt allerdings noch das Problem offen, warum im DM-Textfeld immer nur ein Zeichen angezeigt wird :(
Das muß irgendwie damit zusammenhängen daß der Text aus dem DM-Textfeld markiert wird (kann man sehen, wenn man in der Prozedur einen Haltepunkt setzt).
Da gibt es auch einen Befehl, der die Markierung zu entfernen und den Cursor an das Ende des Textfeldes zu setzen (habe ich schonmal hier gelesen, finde ich jetzt bloß nicht :(

Kurt aus Kienitz
09.07.2001, 15:16
Hallo nochmal,

Habe es gefunden :)

Das Ganze muß so aussehen:

Dim AktVal As String

Private Sub txtDM01_Enter()

If IsNull(Me.txtDM01) Then
AktVal = ""
Else
AktVal = Me.txtDM01
End If

End Sub

Private Sub txtDM01_KeyPress(KeyAscii As Integer)

If IsNumeric(Chr$(KeyAscii)) Then

AktVal = AktVal & Chr$(KeyAscii)

Me.txtDM01.SelLength = 0
Me.txtEuro01 = AktVal / 2


End If

End Sub

Nun aber ein großes aber.
Wenn man daß so macht, muß man tatsächlich alles selber machen, auch Backspaces abfangen etc.

Währe u.U. doch einfacher man berechnet den Euro-Betrag beim Verlassen des DM-Feldes.

Joachim Hofmann
10.07.2001, 09:59
ah, ja super, danke. Ich glaub ich versuchs dann mal "einfach" nur mit "Beim Verlassen". So viele Möglíchkeiten, was der User so eingibt, kann man ja gar nicht voraussehen.
Schon das "Einfach" beim Verlassen die andere Seite aktualisieren, wie ich es dann versuchen werde wird auch nicht das erste mal gehen, wie mir mein Programmiererinstinkt so sagt.

Danke

Kurt aus Kienitz
10.07.2001, 10:03
Hallo Joachim,

Das ist eine weise Entscheidung :)

Das mit dem Beim Verlassen ist recht einfach.
Gib einfach als Steuerelemntinhalt des Euro-Textfeldes =[txtDM01] / 2 an.