Lorsque vous appuyez sur F5 pour compiler un projet, il n'y a pas d'erreur ou d'avertissement, mais le formulaire n'apparaîtra pas. Quoi de neuf?VS 2010 Ultimate VB.NET Le formulaire de projet ne se compilera pas/n'apparaîtra pas
Répondre
Dans le menu VS2010, allez dans Construire -> Gestionnaire de configuration, votre projet a-t-il activé la case à cocher dans la colonne "Construire"? Si le projet est mis à niveau à partir d'une ancienne version de Visual Studio, il se peut qu'il ne cible pas .NET Framework 4.0. Dans ce cas, vous devez le modifier comme expliqué here.
Oui, c'est activé. Ajout du lien du code source par requête ci-dessus dans les commentaires. – Liadc
Pour analyser le problème, appuyez sur F8 (ou F10, selon vos paramètres de clavier par défaut) pour entrer dans le code au lieu d'exécuter l'application. Cela devrait vous conduire à la méthode principale où le formulaire principal serait initialisé.
Ce sont les points saillants dans la ligne rouge 11 dans la forme principale. Je n'ai aucune idée pourquoi ce serait le problème. Le lien source est donné ci-dessus. – Liadc
@Liadc: Que signifie exactement * sur * la ligne 11? Selon mon compte, c'est une ligne vide. –
Chaque fois que vous essayez d'exécuter votre code, il commence par créer une instance de frmMain
, votre formulaire par défaut et celui affiché au démarrage de l'application.
Lorsque ce formulaire est créé, il instancie automatiquement une instance de Form3
parce que vous instancier une variable de ce type appelé modifyForm
en haut du fichier de code de ce formulaire:
Dim modifyForm As New Form3 'modify student
Le problème est que, lorsque le exécution va instancier un objet de type Form3
, il est appelé retour à l'endroit où il était à cause de cette déclaration en haut du fichier de code Form3
:
Dim frmMain As New frmMain
Rincer, faire mousser et répéter. Votre code se transforme en une boucle infinie, en essayant d'instancier une instance de frmMain
, qui essaie d'instancier une instance de Form3
, qui essaie d'instancier une instance de frmMain
, ad nauseum. Finalement, cela débordera votre mémoire disponible et provoquera un StackOverflowException
.
Il est important de noter que tout cela se produit avant que l'instance par défaut de frmMain
est même montré, parce que ces variables sont déclarées en dehors de toutes les méthodes dans votre code. Parce que l'ordinateur ne peut jamais échapper à cette boucle infinie, il n'a jamais une chance de se déplacer et d'afficher réellement votre formulaire.
Et le moment où vous avez tous lu patiemment pour: Fix en supprimant la déclaration de frmMain
en haut du fichier de code Form3
. Je ne sais pas ce que c'est là, de toute façon.
EDIT: Si tout va bien, je peux éclaircir un peu de confusion en ce qui concerne les valeurs de passage entre les formes. Après une étude plus approfondie de votre code, mon instinct me dit que la meilleure solution pour vous est de surcharger le constructeur pour Form3
pour accepter le formulaire appelant (l'instance existante instance de frmMain
) comme argument. Cela vous permettra d'accéder à tous les membres du public de frmMain
de au sein de votre classe Form3
.
Voici une esquisse de la façon dont vous pourriez faire dans votre code:
Public Class frmMain
''#The private data field that stores the shared data
Private _mySharedData As String = "This is the data I want to share across forms."
''#A public property to expose your shared data
''#that can be accessed by your Form3 object
Public Property MySharedData As String
Get
Return _mySharedData
End Get
Set(ByVal value As String)
_mySharedData = value
End Set
End Property
Private Sub frmMain_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
''#Do all of your other stuff here...
''#Create a new instance of Form3, specifying this form as its caller
Dim otherForm As New Form3(Me)
''#Show the new instance of Form3
otherForm.Show()
End Sub
End Class
Public Class Form3
''#The private field that holds the reference to the main form
''#that you want to be able to access data from
Private myMainForm As frmMain
Public Sub New(ByVal callingForm As frmMain)
InitializeComponent()
''#Save the reference to the calling form so you can use it later
myMainForm = callingForm
End Sub
Private Sub Form3_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
''#Access anything that you need from the main form
MessageBox.Show(myMainForm.MySharedData)
End Sub
End Class
Comme vous pouvez le voir, frmMain
expose une propriété publique (soutenu par une variable privée nommée de façon correspondante) appelée MySharedData
. Cela peut être absolument n'importe quel vous voulez, et vous pouvez avoir autant de ceux-ci que vous le souhaitez.
Notez également que le constructeur (la méthode New
) pour Form3
accepte une instance de frmMain
en tant qu'argument. Chaque fois que vous créez un nouvel objet Form3
à partir de frmMain
, il vous suffit de spécifier Me
, ce qui indique que vous voulez passer l'instance actuelle de frmMain
. Dans la méthode constructeur, Form3
stocke la référence à sa forme d'appel et vous pouvez utiliser cette référence à tout moment dans le code Form3
pour accéder aux propriétés publiques exposées par frmMain
.
Le code serait bien. – birryree
Voici la source: http://www.mediafire.com/?5dpxo8otess2bmd Le problème est survenu après l'implémentation de la troisième forme, frmModifyStudent. Ce n'est pas encore terminé, c'est juste une partie copiée de la source d'autres parties du programme. – Liadc