Solved

Bind textbox to custom property in My.Settings

Posted on 2016-10-24
2
34 Views
Last Modified: 2016-10-26
I need to store a complete set of database connection information in a utility app's settings file. Storing a password in clear text is not acceptable, but the user should not have to worry about that. I have the server, database and user name settings all bound to text controls as usual. When it comes to bind to the clear text password setting, it does not show up in the list (illustrated below).

Visual Studio Property Binding Dialog
Here's my customized settings class. The three code attributes are copied directly from the Settings.Designer.vb file generated for the other simple text settings. I would think this property would show up, but it does not. I re-compiled, closed Visual Studio, re-opened -- nothing.

Namespace My
  Partial Friend NotInheritable Class MySettings
    <Global.System.Configuration.UserScopedSettingAttribute(), _
     Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
     Global.System.Configuration.DefaultSettingValueAttribute("")> _
    Public Property Password As String
      Get
        Return Utility.Security.Decrypt(My.Settings.PasswordEncrypted)
      End Get
      Set(value As String)
        My.Settings.PasswordEncrypted = Utility.Security.Encrypt(value)
      End Set
    End Property
  End Class
End Namespace

Open in new window


If there is a better way to handle this I'm open, but the above is how it ought to work.
0
Comment
Question by:CraigYellick
2 Comments
 
LVL 27

Accepted Solution

by:
Ark earned 500 total points
ID: 41859636
There are 3 options:
1. Bind control property at run-time:
PasswordTextBox.DataBindings.Add("Text", My.Settings, "Password")

Open in new window

2. Decript password on loading settings and encript on saving:
Namespace My
  Partial Friend NotInheritable Class MySettings
      Private Sub MySettings_SettingsLoaded(ByVal sender As Object, ByVal e As System.Configuration.SettingsLoadedEventArgs) Handles Me.SettingsLoaded
        My.Settings.PasswordEncrypted = Utility.Security.Decrypt(My.Settings.PasswordEncrypted)
      End Sub
      Private Sub MySettings_SettingsSaving(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles Me.SettingsSaving
        My.Settings.PasswordEncrypted = Utility.Security.Encrypt(My.Settings.PasswordEncrypted)
      End Sub
  End Class
End Namespace

Open in new window

3. Add Password setting via settings tab in IDE and change code for this property directly in Settings.Designer.vb
0
 
LVL 11

Author Comment

by:CraigYellick
ID: 41860747
While it'd be nice to get the setting to bind like the others, it's not worth spending a lot of time on it. Option #2 seems safe enough but I did add a line to clear out the clear-text password when saving.

Namespace My
  Partial Friend NotInheritable Class MySettings
    Private Sub MySettings_SettingsLoaded(sender As Object, e As System.Configuration.SettingsLoadedEventArgs) Handles Me.SettingsLoaded
      My.Settings.Password = Utility.Security.Decrypt(My.Settings.PasswordEncrypted)
    End Sub
    Private Sub MySettings_SettingsSaving(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles Me.SettingsSaving
      My.Settings.PasswordEncrypted = Utility.Security.Encrypt(My.Settings.Password)
      My.Settings.Password = "" ' Do not store cleartext password
    End Sub
  End Class
End Namespace

Open in new window

0

Featured Post

6 Surprising Benefits of Threat Intelligence

All sorts of threat intelligence is available on the web. Intelligence you can learn from, and use to anticipate and prepare for future attacks.

Join & Write a Comment

Suggested Solutions

Article by: jpaulino
XML Literals are a great way to handle XML files and the community doesn’t use it as much as it should.  An XML Literal is like a String (http://msdn.microsoft.com/en-us/library/system.string.aspx) Literal, only instead of starting and ending with w…
If you need to start windows update installation remotely or as a scheduled task you will find this very helpful.
Sending a Secure fax is easy with eFax Corporate (http://www.enterprise.efax.com). First, Just open a new email message.  In the To field, type your recipient's fax number @efaxsend.com. You can even send a secure international fax — just include t…
Here's a very brief overview of the methods PRTG Network Monitor (https://www.paessler.com/prtg) offers for monitoring bandwidth, to help you decide which methods you´d like to investigate in more detail.  The methods are covered in more detail in o…

762 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

23 Experts available now in Live!

Get 1:1 Help Now