2014-08-27 5 views
0

Я пытаюсь сохранить значение Color из ColorDialog в реестр. Я использую код ниже в своей утилите. Тем не менее, я замечаю, что при повторном запуске утилиты цвет, назначенный на Button1 (значение, считанное из реестра на), отличается от того, что я сохранил в реестре на первом месте.Как сохранить правильные значения диалогового окна цвета в реестре Windows

Основное приложение, для которого я разработал эту утилиту, имеет встроенную аналогичную функцию для сохранения/вызова настроек цвета из реестра. Я проверил, что код в моей утилите, который возвращает цвет из реестра при загрузке формы, хорош, а цвет соответствует тому, что я установил в главном приложении.

Не могли бы вы проверить код ниже и сообщить мне, что не так?

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 

    Dim CLR = ColorDialog1.Color.GetHashCode.ToString 

    If Me.ColorDialog1.ShowDialog = DialogResult.OK Then 
     Dim regKey As RegistryKey 
     regKey = Registry.CurrentUser.OpenSubKey("Software\MyApp\Settings\Tags", True) 
     regKey.SetValue("DefaultColor", CLR, RegistryValueKind.DWord) 
     regKey.Close() 

     Button1.BackColor = Me.ColorDialog1.Color 
    End If 
End Sub 

кодекс используется для вызова цвета из реестра:

If My.Computer.Registry.GetValue("HKEY_CURRENT_USER\Software\MyApp\Settings\Tags", "DefaultColor", Nothing) Is Nothing Then 
    MsgBox("Value does not exist.") 
    'creates the DWORD value if not found 
    My.Computer.Registry.SetValue("HKEY_CURRENT_USER\Software\MyApp\Settings\Tags", "DefaultColor", 0, RegistryValueKind.DWord) 
Else 
    Dim HEX = My.Computer.Registry.GetValue("HKEY_CURRENT_USER\Software\MyApp\Settings\Tags", "DefaultColor", Nothing) 
    Dim myColor As Color = System.Drawing.ColorTranslator.FromWin32(HEX.ToString) 
    TagLeaderCLRButton.BackColor = myColor 
End If 
+0

Очевидная ошибка в том, что значение «CLR» получено * до *, вы показываете диалог. Внесение неправильного значения в реестр, старый. Переместите 'Dim CLR' * внутрь * оператор If. И используйте Color.ToArgb() –

+0

Спасибо за предложение .. Я изменил код ... – DK2014

ответ

2

код Hash не представляет цвет. Why GetHashCode() matters?

Dim CLR = ColorDialog1.Color.GetHashCode.ToString 

Вместо этого, вы должны использовать:

Dim clr = ColorDialog1.Color.ToARGB() 

И если это возможно, использовать My.settings для хранения цвета вместо реестра. Вы можете напрямую сохранить цвет, создав параметр в свойствах проекта. :)

Редактировать:
Integer.Parse(HEX.ToString) несколько лучше, чем просто HEX.ToString() справа? :)
Я не вижу ничего плохого. Если это ваш действительный код, вы можете изменить его на что-то вроде этого, если это необходимо. (Только идея):

Dim path = "HKEY_CURRENT_USER\Software\MyApp\Settings\Tags" 
Dim defColor = My.Computer.Registry.GetValue(path, "DefaultColor", Nothing) 

If defColor Is Nothing Then 
     MsgBox("Value does not exist.") 
     'creates the DWORD value if not found 
     My.Computer.Registry.SetValue(path, "DefaultColor", &HFF00BFFF, RegistryValueKind.DWord) 
     defColor = &HFF00BFFF 
End If 
Button1.BackColor = Color.FromArgb(Integer.Parse(defColor.ToString)) 

С этим button1 обратно цвет автоматически устанавливается в мой избр цвет от первого мыши. он он.

+0

Большое спасибо за это. Не могли бы вы взглянуть на другой код, который я использую, чтобы получить сохраненное значение цвета при загрузке формы, которое присваивается кнопке backcolor ... Я добавлю этот код в главный пост .. – DK2014

+0

Спасибо hexMint .. дам это пытаться... – DK2014