.Net Blog

By Dermot French:

Had tried this out a few years back, and it ate up my CPU/Memory so unistalled it on the day I installed it.

Just downloaded the latest version available on their website

Structural highlighting is my favourite feature to date (even though it isn't much of a time saver)

Have to say no speed/cpu/memory issues now, and the product is SUPERB.
It is going to save me so much time coding I might cut down to a 6 day working week.

When users have to enter data in numerous numeric up down and tab between them, they can't just key the new amount.

Say 1 is in the numeric up down they have just tabbed to and they type 2, it will go to 21 (instead of 2 which they wanted).

So for this I have put a bit of code on the got focus

Private Sub NumericUpDown1_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles NumericUpDown1.GotFocus
Me.NumericUpDown1.Select(0, Me.NumericUpDown1.Value.ToString.Length)
End Sub

Private Sub NumericUpDown2_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles NumericUpDown2.GotFocus
Me.NumericUpDown2.Select(0, Me.NumericUpDown1.Value.ToString.Length)
End Sub

This selects the whole value and allows them to type.
Why does the control not just behave like this in the first place?

Also I'm toying with setting background colours to yellow when controls have focus and back to white when they do not, this is much better than the less subtle built in controls.

By Dermot French:

I use enums in my code a lot.
Often I have to set the various enumerations into the text in a text box. This is simple:

Me.ComboBoxGameCode.DataSource = System.Enum.GetValues(GetType(NumbersGameDraw.GameType))

This is nice but not great.
Say we have enums representing multiple words (for example the following)
Paid
NotPaid (we would like NotPaid to display as Not Paid).

So I created enumhelper class to do this:

Public Class EnumHelper
Private Shared Function ChangeHungarianTextToSeperateWords(ByVal originalText As String) As String

Dim strOutput As String = ""
Dim i As Integer = 0
While i < originalText.Length
Dim char1 As Char
char1 = originalText.Substring(i, 1)

If Char.IsUpper(char1) Then
strOutput &= " " & char1
Else
strOutput &= char1
End If
i += 1
End While
Return strOutput.Trim

End Function

Public Shared Function GetEnumSeperateWordsList(ByVal enumType As Type) As ArrayList
Dim x = System.Enum.GetNames(enumType)
Dim y As New ArrayList

For Each item1 As Object In x
'item1 = Me.ChangeHungarianTextToSeperateWords(item1)
y.Add(EnumHelper.ChangeHungarianTextToSeperateWords(item1))
Next
Return y

End Function
End Class

 

When a control has focus there is a very subtle change in it's colour, that experienced windows users know.

However we develop software that is often the 1st windows programme the users have experienced.

To help, with this we sometimes set the background colour to yellow on focus and white on no focus.

Here is some easy code to allow this:

#Region "ChangeColourOnHasFocus"
Private Sub SetControlBackgroundToWhiteOnLostFocus(ByVal sender As System.Object, ByVal e As System.EventArgs)
Dim ctl1 As Control
ctl1 = sender
Debug.WriteLine(ctl1.Text)

Dim blChangeColour As Boolean
blChangeColour = Me.needToChangeControlColourOnFocusChange(ctl1)
If blChangeColour Then
ctl1.BackColor = Color.White
End If

End Sub
Private Sub SetControlBackgroundToYellowOnFocus(ByVal sender As System.Object, ByVal e As System.EventArgs)
Dim ctl1 As Control
ctl1 = sender

Dim blChangeColour As Boolean
blChangeColour = Me.needToChangeControlColourOnFocusChange(ctl1)
If blChangeColour Then
ctl1.BackColor = Color.Yellow
End If

End Sub

Function needToChangeControlColourOnFocusChange(ByVal control1 As Control) As Boolean
' Don't change colour if control is not enabled or read only
Dim blSetColour As Boolean = True
If control1.Enabled = False Then
Return False
End If
If TypeOf (control1) Is TextBox Then
Dim txt1 As TextBox
txt1 = control1
If txt1.ReadOnly Then
Return False
End If
End If
Return True
End Function

Sub AddChangeColourOnFocusLostFocusHandlers()
' Can call this on form load on whenever you want to enable the colour changing
For Each control1 As Control In Me.Controls
Me.AddHandlersForLostFocusOnControlAndChildControls(control1)
Next
End Sub

Private Sub AddHandlersForLostFocusOnControlAndChildControls(ByVal control1 As Control)
For Each ctrlChild As Control In control1.Controls
Me.AddHandlersForLostFocusOnControlAndChildControls(ctrlChild)
Next
If TypeOf (control1) Is TextBox Or TypeOf (control1) Is ComboBox Then
AddHandler control1.GotFocus, AddressOf Me.SetControlBackgroundToYellowOnFocus
AddHandler control1.LostFocus, AddressOf Me.SetControlBackgroundToWhiteOnLostFocus
End If
End Sub

#End Region 'End Change Foucus region