[Gambas-user] A tricky requirement for SpinBox range : any ideas?

Tobias Boege taboege at ...626...
Thu Dec 13 14:50:56 CET 2012


On Thu, 13 Dec 2012, Tobias Boege wrote:
> On Thu, 13 Dec 2012, Bruce wrote:
> > The situation is:
> > 
> >         We either know that a particular horse was foaled (born) on or
> >         after year 2000 or we don't know which year it was foaled in,
> >         i.e. the value on the database for the foaled year is either
> >         something >=2000 or zero.
> >         
> > The problem is:
> >         I am trying to use a spinbox to allow the user to enter the
> >         foaled year.  To make it "easier" or "go faster" the minimum
> >         value of the spinbox should be 2000 and the maximum should be
> >         Year(Now()). But there is a requirement that if the horse's
> >         foaling date is not known then the user should be able to select
> >         0 in the spinbox.
> >         
> >         Obviously, setting the spinbox minumum to 0 doesn't help when
> >         the foaling year is 2010 as they have to mouse wheel for a
> >         considerable time before setting it to a known value.  I've
> >         tried using a checkbox next to the spinbox for "unknown" but it
> >         at best it looks messy (and the resultant code stinks).
> >         
> 
> They wouldn't have to wheel if they could _type_ ;-)
> 
> > By the way, I choose not use a date picker or a calendar control as the
> > only data of interest is the year.
> > 
> > As per the subject, anyone got any good ideas?
> 
> Let's face the truth: if you want to display "0" the [MinValue; MaxValue]
> must include 0 as it would otherwise be rejected and you can't force any
> text via the Text property or suchlike.
> 
> So I suggest MinValue = 0, MaxValue = Year(Now()) and this (hopefully not
> too messy) code:
> 
> Public Sub SpinBox1_Change()
> 	If SpinBox1.Value = 1999 Then
> 		SpinBox1.Value = 0
> 	Endif
> 	If SpinBox1.Value And SpinBox1.Value < 2000 Then
> 		SpinBox1.Value = 2000
> 	Endif
> End

Errm, that code had leftovers from a different, non-working approach.
This may be better:

If SpinBox1.Value = 1999 Then
	SpinBox1.Value = 0
Else If SpinBox1.Value = 1 Then
	SpinBox1.Value = 2000
Endif




More information about the User mailing list