I've already solved the issue which I will describe here but I just wonder why I have to do it as it is done now.
I am working on my Excel reader and changed from .Net Core to Vulcan dialect so I can create a DBF from the Excel sheet. On the WPF form I added a checkbox with name cbisheader and if checked the program knows that the first row in the Excel contains the headers.
So I used:
If cbisheader:Checked
This is the VO/Vulcan way but it doesn't work. I get:
Error XS0079 The event 'System.Windows.Controls.Primitives.ToggleButton.Checked' can only appear on the left hand side of += or -=
After some search (somebody wrote "Checked here is an event, not a bool, that happens when it is checked. You need a different property - presumably IsChecked.") I changed it to:
If cbisheader:isChecked
and got:
Error XS0266 Cannot implicitly convert type 'logic?' to 'logic'. An explicit conversion exists (are you missing a cast?)
Below what finally worked. But it doesn't make sense to me. I would expect the above should work, or this one but with a double =.
If cbisheader:isChecked=True
What is the logic behind this "logic"?
Dick
Getting the status of a WPF checkbox in X#
Getting the status of a WPF checkbox in X#
Hi Dick,
This is because apparently IsChecked is not of normal LOGIC type, but it returns a special type, a nullable logic. This is different in the sense it provides 3 states, yes, no and "don't know" (when the value is NULL).
In order to use such a type, you'd normally need to check first:
IF cbisheader:IsChecked:HasValue // returns false if it is NULL
and only if the above returns TRUE, then you can be sure that the var does hold a LOGIC value (and not NULL), and you can access this value with
IF cbisheader:IsChecked:Value // true or false
or with the (cast) that you used before.
The reason behind introducing Nullable types, is to provide this "do not know" value to common types, likes ints. So, for example, a nullable int can have all the values a normal int has, but it can also hold NULL, which may mean that the value has not be assigned yet, when reading it from a database the contents where corrupted, things like that. With a normal int, we would need to use for example by convention a value of -1 to denote "invalid vale", but this causes all sorts of problems, thus the introduction of nullable types in .Net.
Now, why on earth should a CheckBox have a "don't know" value in addition to checked and unchecked, I have no idea, you'd need to ask the people who designed WPF about this
This is because apparently IsChecked is not of normal LOGIC type, but it returns a special type, a nullable logic. This is different in the sense it provides 3 states, yes, no and "don't know" (when the value is NULL).
In order to use such a type, you'd normally need to check first:
IF cbisheader:IsChecked:HasValue // returns false if it is NULL
and only if the above returns TRUE, then you can be sure that the var does hold a LOGIC value (and not NULL), and you can access this value with
IF cbisheader:IsChecked:Value // true or false
or with the (cast) that you used before.
The reason behind introducing Nullable types, is to provide this "do not know" value to common types, likes ints. So, for example, a nullable int can have all the values a normal int has, but it can also hold NULL, which may mean that the value has not be assigned yet, when reading it from a database the contents where corrupted, things like that. With a normal int, we would need to use for example by convention a value of -1 to denote "invalid vale", but this causes all sorts of problems, thus the introduction of nullable types in .Net.
Now, why on earth should a CheckBox have a "don't know" value in addition to checked and unchecked, I have no idea, you'd need to ask the people who designed WPF about this
Chris Pyrgas
XSharp Development Team
chris(at)xsharp.eu
XSharp Development Team
chris(at)xsharp.eu
Getting the status of a WPF checkbox in X#
Hello Chris,
Thanks for the lesson. I can imagine the "don't know" - it is not uncommon, given the privacy rules, to see questions like Male/Female expanded with "don't want to say". So the nullable logic is the logic? I understand.
Dick
Dick
Thanks for the lesson. I can imagine the "don't know" - it is not uncommon, given the privacy rules, to see questions like Male/Female expanded with "don't want to say". So the nullable logic is the logic? I understand.
Dick
Dick
- lumberjack
- Posts: 727
- Joined: Fri Sep 25, 2015 3:11 pm
- Location: South Africa
Getting the status of a WPF checkbox in X#
Hi Dick,
I wrote this little #command to solve the problem based on the c# "?" to define Nullables:
Hope this helps...
Well I solved this long time ago, remember you can have a CheckBox with no initial value set. .NET don't allow NULL booleans or DateTime values.ic2 wrote:I've already solved the issue which I will describe here but I just wonder why I have to do it as it is done now.
I wrote this little #command to solve the problem based on the c# "?" to define Nullables:
Code: Select all
#command LOCAL <v0,...> AS <typ>? => ;
LOCAL <v0> AS System.Nullable< <typ> >
FUNCTION Start() AS VOID
LOCAL lNull, lTrue, lFalse AS LOGIC?
lTrue := TRUE
lFalse := FALSE
?"Has value : ", lNull:HasValue, lTrue:HasValue, lFalse:HasValue
?" Values : ", lNull:, lTrue, lFalse, e"Note only lTrue and lFalse displayed, lNull has no value, hence empty """
?" Is null : ", lNull == NULL, lTrue == NULL, lFalse == NULL
?" Is false : ", lNull == FALSE, lTrue == FALSE, lFalse == FALSE
?" Is true : ", lNull == TRUE, lTrue == TRUE, lFalse == TRUE
RETURN
______________________
Johan Nel
Boshof, South Africa
Johan Nel
Boshof, South Africa
Getting the status of a WPF checkbox in X#
Hi Dick,
this reflects the SQL logic: a logic field in a SQL table can be true, false or null.
Wolfgang
this reflects the SQL logic: a logic field in a SQL table can be true, false or null.
Wolfgang
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
Getting the status of a WPF checkbox in X#
Yeah - and if the unknown moron who coined the "null" instead of "unknown", or better, "not assigned", had known better, many, many misconceptions could have been avoided...
Regards
Karl
(on Win8.1/64, Xide32 2.20, X#2.20.0.3)
Karl
(on Win8.1/64, Xide32 2.20, X#2.20.0.3)
Getting the status of a WPF checkbox in X#
Hello Karl,
Dick
Probably the same guy who thought it was a good idea to make indexes zero based .Yeah - and if the unknown moron who coined the "null" instead of "unknown", or better, "not assigned", had known better, many, many misconceptions could have been avoided...
Dick
- lumberjack
- Posts: 727
- Joined: Fri Sep 25, 2015 3:11 pm
- Location: South Africa
Getting the status of a WPF checkbox in X#
Haha,
0...9 = 10 Numbers,
1...10 = 10 Numbers // Ask anybody with this mindset and they will tell you, oh yes 0 is also a number. Therefore 1...10 means actually 0...10 = 11 Numbers, it is actually the only Number system that uses this concept, 0...1 = 2 Numbers, 0...7 = 8 Numbers, 0..15 = 16 Numbers, 0...127 = 128 Numbers, 0..255 = 256 Numbers...
Even, how many fingers can you possibly see, is not 10 answers, it is 11... We not using a Decimal system actually, we on a Number[sub]11[/sub] system... No sorry it is actually Number[sub]21[/sub]... if showing fingers palm forward or backward is added, or if palm forward means "+", we have -10...9, again 21 possibilities...
I rest my case with /az as X# switch...
Well a decimal system means 10 digits, not 11 like the way the average person think...ic2 wrote:Probably the same guy who thought it was a good idea to make indexes zero based .Yeah - and if the unknown moron who coined the "null" instead of "unknown", or better, "not assigned", had known better, many, many misconceptions could have been avoided...
0...9 = 10 Numbers,
1...10 = 10 Numbers // Ask anybody with this mindset and they will tell you, oh yes 0 is also a number. Therefore 1...10 means actually 0...10 = 11 Numbers, it is actually the only Number system that uses this concept, 0...1 = 2 Numbers, 0...7 = 8 Numbers, 0..15 = 16 Numbers, 0...127 = 128 Numbers, 0..255 = 256 Numbers...
Even, how many fingers can you possibly see, is not 10 answers, it is 11... We not using a Decimal system actually, we on a Number[sub]11[/sub] system... No sorry it is actually Number[sub]21[/sub]... if showing fingers palm forward or backward is added, or if palm forward means "+", we have -10...9, again 21 possibilities...
I rest my case with /az as X# switch...
______________________
Johan Nel
Boshof, South Africa
Johan Nel
Boshof, South Africa