Si ça fait ça avec tout tes projets, c'est probablement un problème lié à Visual Studio ou à la framework.
As tu essayé de les réinstaller?
Par contre puisque tu as posté ce code, je me permets quelques critiques.
Déjà tu mélanges VB6 et VB.Net, c'est autorisé par Microsoft, la plupart du temps ça marche, mais quand ça buggue, il est très difficile de trouver pourquoi.
Par défaut, il est conseillé de virer l'import de VisualBasic, voir cet article.
Ensuite donne des noms à tes contrôles, Form1 TextBox1 etc... c'est pas pratique à maintenir, quand tu y reviendra dans 1 an, tu ne sauras plus à quoi il servent.
Une pratique courante est de mettre un préfixe (3 ou 4 caratères) qui donne le type du control, par exemple frm pour Form, txb pour TextBox suivi d'un nom clair en CamelCase => frmPrincipale, frmDemarrage, txbMotDePasse etc....
charactere(CShort(Rnd() * 35))
les index de tableaux sont des entiers sur 32 bits, donc tu fais une première conversion en entier 16 bits et la framework en refait une derrière toi de 16 bits à 32, passer direct en 32 bits serait plus optimisé, (idem pour ta variable a).
Encore mieux, en codant en VB.Net et pas en VB6:
Dim monRandom As new Random()
Private Sub generate_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles generate.Click
'.... du code à toi avant
pass = pass & charactere(monRandom.Next(36))'c'est directement un int inférieur ou égal à 36
'.... du code à toi après
là
While (a <= 23)
'...
a = a + 1
End While
Un for serait plus adapté
For a = 0 to 23
'...
Next
en 2017, ça c'est tout simplement pas possible
charactere(0) = "a"
charactere(1) = "b"
charactere(2) = "c"
charactere(3) = "d"
charactere(4) = "e"
charactere(5) = "f"
charactere(6) = "g"
charactere(7) = "h"
charactere(8) = "i"
charactere(9) = "j"
charactere(10) = "k"
charactere(11) = "l"
charactere(12) = "m"
charactere(13) = "n"
charactere(14) = "o"
charactere(15) = "p"
charactere(16) = "q"
charactere(17) = "r"
charactere(18) = "s"
charactere(19) = "t"
charactere(20) = "u"
charactere(21) = "v"
charactere(22) = "w"
charactere(23) = "x"
charactere(24) = "y"
charactere(25) = "z"
charactere(26) = "0"
charactere(27) = "1"
charactere(28) = "2"
charactere(29) = "3"
charactere(30) = "4"
charactere(31) = "5"
charactere(32) = "6"
charactere(33) = "7"
charactere(34) = "8"
charactere(35) = "9"
D'une part un tableau dont on connait les valeurs à l'intialisation ça s'initialise comme ça
Dim charactere() As Char = { "a"c, "b"c, "c"c, etc.... }
Et puis dans ce cas précis tu pourrais aussi faire un for sur les codes Ascii des lettres (97 à 122) et un second sur le chiffres (48 à 47).
En aparté, un mot de passe avec juste des minuscules et des chiffres c'est pas très sécurisé.
Et d'ailleurs en se servant du code Ascii, y'a même pas besoin de ce tableau
Dim monRandom As new Random()
Private Sub generate_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles generate.Click
For i As Integer = 0 To 23
Dim rand As Integer = monRandom.Next(36)
Dim ascii As Integer = If(rand < 26, rand + 97, rand + 22)
pass += Convert.ToChar(ascii).ToString()
Next i
en respectant le modèle juste des chiffres et des minuscules, sinon il suffit de faire entre les caractères 33 et 126.
Enfin, je suppose que Form1 est ton formulaire de démarrage, alors ceci
'Ferme completement le programme
Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
End
End Sub
ne sert à rien. En effet, dès que Form1 est fermée, le programme est fini.