Ich habe ein kleines Problem mit NumUpDown´s kurz (NUD's) und hoffe ihr könnt mir helfen.
Zu klären ist das ich den Begriff Pool verwende dieser ist im Grunde ein Punkte-Guthaben und bezieht sich nur auf eine Variable die in den Settings hinterlegt ist My.Settings.AttrRest und zwar mit dem Wert 14
Pool ist eben kürzer als My.Settings.AttrRest *g*
Folgendes ist nun der Fall. Ich habe auf einer Form 7 NUD´s die mit 0 Beginnen und einen Maxwert von 4 haben. Dies ist jeweils in den Eigenschaften eingestellt.
Dann habe ich eben besagten "Pool" den man mit den NUD's verteilen kann oder eben wieder in den Pool zurück geben kann wenn man den Pfeil runter klickt.
Ich hatte zuerst das Problem, das ich nicht abfragen kann, ob nun Pfeil auf oder Pfeil ab gedrückt wurde. Dieses habe ich nach ein wenig suchen im Internet aber mit hilfe einer Variable "Oldvalue" und den Vergleich mit der NUD.Value kurz dann Value
hinbekommen. So kann ich abfragen was geklickt wurde.
Da ich nun aber noch ein "Pool" habe mit 14 Punkten also die NUD's nicht alle einfach bis auf 4 gehoben werden können sondern eben verteilt werden müssen, muss ich auch irgendwie eine Grenze einbringen. Ab wann man eben nicht mehr weiter auf Pfeil auf klicken kann..
Nun stosse ich auf ein neues Problem. Ist der Pool nun auf 0 also leer, sollte nichts passieren wenn ich auf Pfeil auf klicke. Leider... steigt die Value in der NUD trotzdem um eines an , es wird dann zwar nichts im Pool geändert aber der Wert stimmt nun nicht mehr, drücke ich nun auf Pfeil runter steigt der Pool eben um einen Punkt an und "generiert" einen Punkt den es im Grunde nicht gibt.
Gelöst habe ich das in Punkt 10 des Codes weiter unten. Es wird nun an Stelle der alte Wert der NUD.Value wieder eingetragen. So bleibt nach weiteren klicken auf Pfeil auf und bei "leerem Pool" dieser "für den Nutzer" sichtbar auf den alten Wert.
Nun habe ich aber das Problem und keine Idee was ich machen kann, wenn der Code zur Stelle 10 kommt. (also 1. der Nutzer klickt auf Pfeil auf und 2. der Pool ist aktuell auf 0 also leer) dann rutscht der Code nach der Änderung der NUD.Value auf den alten Wert in das untere Else, also eigtl. der Punkt der dafür verantwortlich ist, wenn man Pfeil runter geklickt hat, und der Pool steigt eben um 1 und es ist durcheinander.
hat jemand evtl. eine Idee wie ich entweder das Control zwingen kann sollte der Pool leer sein, nicht mehr auf den Pfeil auf zu reagieren, oder was ich am Code ändern könnte, damit nicht in das untere Else gesprungen wird. Sobalt ich die Value wieder angleiche.
Zu klären ist das ich den Begriff Pool verwende dieser ist im Grunde ein Punkte-Guthaben und bezieht sich nur auf eine Variable die in den Settings hinterlegt ist My.Settings.AttrRest und zwar mit dem Wert 14
Pool ist eben kürzer als My.Settings.AttrRest *g*
Folgendes ist nun der Fall. Ich habe auf einer Form 7 NUD´s die mit 0 Beginnen und einen Maxwert von 4 haben. Dies ist jeweils in den Eigenschaften eingestellt.
Dann habe ich eben besagten "Pool" den man mit den NUD's verteilen kann oder eben wieder in den Pool zurück geben kann wenn man den Pfeil runter klickt.
Ich hatte zuerst das Problem, das ich nicht abfragen kann, ob nun Pfeil auf oder Pfeil ab gedrückt wurde. Dieses habe ich nach ein wenig suchen im Internet aber mit hilfe einer Variable "Oldvalue" und den Vergleich mit der NUD.Value kurz dann Value
hinbekommen. So kann ich abfragen was geklickt wurde.
Da ich nun aber noch ein "Pool" habe mit 14 Punkten also die NUD's nicht alle einfach bis auf 4 gehoben werden können sondern eben verteilt werden müssen, muss ich auch irgendwie eine Grenze einbringen. Ab wann man eben nicht mehr weiter auf Pfeil auf klicken kann..
Nun stosse ich auf ein neues Problem. Ist der Pool nun auf 0 also leer, sollte nichts passieren wenn ich auf Pfeil auf klicke. Leider... steigt die Value in der NUD trotzdem um eines an , es wird dann zwar nichts im Pool geändert aber der Wert stimmt nun nicht mehr, drücke ich nun auf Pfeil runter steigt der Pool eben um einen Punkt an und "generiert" einen Punkt den es im Grunde nicht gibt.
Gelöst habe ich das in Punkt 10 des Codes weiter unten. Es wird nun an Stelle der alte Wert der NUD.Value wieder eingetragen. So bleibt nach weiteren klicken auf Pfeil auf und bei "leerem Pool" dieser "für den Nutzer" sichtbar auf den alten Wert.
Nun habe ich aber das Problem und keine Idee was ich machen kann, wenn der Code zur Stelle 10 kommt. (also 1. der Nutzer klickt auf Pfeil auf und 2. der Pool ist aktuell auf 0 also leer) dann rutscht der Code nach der Änderung der NUD.Value auf den alten Wert in das untere Else, also eigtl. der Punkt der dafür verantwortlich ist, wenn man Pfeil runter geklickt hat, und der Pool steigt eben um 1 und es ist durcheinander.
VB.NET-Quellcode
- Private Sub Num_main_Bew_ValueChanged(sender As Object, e As EventArgs) Handles Num_main_Bew.ValueChanged
- Static oldvalue As Integer
- Dim value As Integer = CInt(CType(sender, NumericUpDown).Value)
- If value > oldvalue Then
- If My.Settings.AttrRest > 0 Then
- My.Settings.AttrRest = My.Settings.AttrRest - 1
- oldvalue = value
- Else
- CType(sender, NumericUpDown).Value = oldvalue
- End If
- Else
- My.Settings.AttrRest = My.Settings.AttrRest + 1
- oldvalue = value
- End If
- Label_main_RestAttrPunkte.Text = My.Settings.AttrRest.ToString
- End Sub
hat jemand evtl. eine Idee wie ich entweder das Control zwingen kann sollte der Pool leer sein, nicht mehr auf den Pfeil auf zu reagieren, oder was ich am Code ändern könnte, damit nicht in das untere Else gesprungen wird. Sobalt ich die Value wieder angleiche.