To read all database names:
Using con As New SqlConnection("Data Source=GRIFFPC\SQLEXPRESS;Integrated Security=True")
con.Open()
Using cmd As New SqlCommand("sp_databases", con)
cmd.CommandType = CommandType.StoredProcedure
Dim read As SqlDataReader = cmd.ExecuteReader()
While read.Read()
Console.WriteLine(DirectCast(read("DATABASE_NAME"), String))
End While
End Using
End Using
Your other question is harder to answer - all you have to do is design a form which contains a server name, a user name, and a password field at the minimum, and which returns a connection string, but that really isn't very user-friendly, and probably isn't exactly what you want. Remember that different databases can have different users, and different passwords...
Open SSMS and the first screen which appears is probably what you want to duplicate - is any part of that giving you a problem?