Solution 2 and 3 will crash with an OutOfBounds Exception if the Value has a date which is greater than the number of days in the Next/Previous month and the user changes month using the arrow buttons. For Example when the Value is 10/31/2014 and the control displays October, 2014. When you change the Month to September the Value is set to 9/31/2014 which is an invalid date and causes an exception.
A workaround is
Private Sub SalesDatePicker_ValueChanged(sender As Object, e As EventArgs) Handles SalesDatePicker.ValueChanged
If SalesDatePicker.Value.Day <> 1 Then
SalesDatePicker.Value = DateSerial(SalesDatePicker.Value.Year, SalesDatePicker.Value.Month, 1)