2010-11-27 36 views
3

Je suis un peu n00b à VB et je me demandais comment rendre une variable disponible sur plusieurs Subs. C'est juste une application de test pour se familiariser avec VB. Mon code:VB 2010 'variable' n'est pas déclaré. Il peut être inaccessible en raison de son niveau de protection

Public Class Sentences 

Private Sub SentenceBox_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SentenceBox.TextChanged 
    If Me.Text = Trim(Sentence) Then 
     MsgBox("Good job!") 
     Main_Menu.Show() 
     Me.Close() 
    End If 
End Sub 

Private Sub ABCs_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
    Dim random As Integer = CInt((Rnd() * 10) + 1) 
    Dim Sentence As String 


    Select Case random 
     Case 1 
      Sentence = "The quick brown fox jumped over the lazy dog!" 
     Case 2 
      Sentence = "Hi there, how are you doing?" 
     Case 3 
      Sentence = "What is the answer to life?" 
     Case 4 
      Sentence = "The cat in the hat was fat." 
     Case 5 
      Sentence = "John and Sam had always been fat." 
     Case 6 
      Sentence = "The snow is falling hard." 
     Case 7 
      Sentence = "Here, dinner is always served nightly." 
     Case 8 
      Sentence = "The dog barks at the passing cars." 
     Case 9 
      Sentence = "The dust settles on the books." 
     Case 10 
      Sentence = "Fire burns brightly when you add kerosene." 
    End Select 
End Sub 

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click 
    SentenceBox.Text = Sentence 

    End Sub 
End Class 

Mon erreur est:

"Sentences" n'est pas déclarée. Il peut être accessible en raison de son niveau de protection «

+0

Je ne pense pas que le code que vous avez posté qui a effectivement produit ce message d'erreur. –

Répondre

6

Variables dans VB.NET a un scope très particulier, limitant leur disponibilité à diverses parties de votre code en fonction de la façon dont ils sont déclarés et où ils sont déclarés

Votre variable Sentence a une portée de niveau procédure, ce qui signifie qu'elle est disponible uniquement dans la procédure dans laquelle elle a été déclarée. Dans votre cas, il est déclaré dans la méthode ABCs_Load ("Sub"), il ne sera donc disponible que pour coder dans cette méthode.

Si, au contraire, vous voulez être en mesure d'accéder à la variable Sentence dans une des méthodes dans votre classe (Forms sont toujours classes VB.NET), vous pouvez déclarer la variable avec une portée au niveau du module. Pour ce faire, vous devez ajouter un private field à votre classe Sentences, en dehors de d'une méthode particulière (Sub ou Function). Cette déclaration ressemblera à quelque chose comme ceci:

Private Sentence As String 


Bien sûr, vous pouvez également déclarer la variable comme Public au lieu de Private, qui le rendre disponible à d'autres classes en dehors de la classe actuelle. Par exemple, si vous avez un formulaire deuxième que vous souhaitez pouvoir accéder au contenu de votre variable Sentence, vous pouvez le déclarer comme Public dans la classe du premier formulaire, puis y accéder à partir de l'une des méthodes du deuxième la classe de forme comme ceci:

MessageBox.Show(myForm1.Sentence) 

Notez que parce qu'il ne se trouve dans une autre forme (une classe différente de celle qu'il est en cours d'accès), vous devez qualifier complètement la référence. C'est comme si votre famille vous appelait "Mike", mais d'autres doivent vous appeler "Mike Jones" pour vous différencier de "Mike Smith"."


Pour en savoir plus, voir aussi ces articles sur MSDN:

-1

Mettre cette rubrique "Sentences publique de classe":

Dim Sentence As String = String.Empty 

Et supprimez la déclaration de la portée ABCs_Load.

0

Déplacez la ligne Dim Sentence As String de ABCs_Load à immédiatement après Public Class Sentences.

Cela rendra la variable Phrase accessible à tous les sous-marins et fonctions de la classe Sentences.

0

Si vous obtenez ce pour chaque webcontrol à la page, puis faites un clic droit sur le projet ou le dossier avec l'erreur et « Convertir en WebApplication » pour générer automatiquement ses fichiers designer.vb (où ils se déclarent dans une partie classe avec le même nom).

0

vous devez le déclarer comme une variable publique public sentence as string=string.empty mais si étiez-vous je voudrais juste le déclarer dans l'ensemble de la classe échantillon

public class NameOfClass 
 
    dim sentence as string=string.empty 
 

 
    public sub nameOfSub 
 
    --you can use the variable 'sentence' here 
 
    end sub 
 
    public sub nameOfSub2 
 
    --you can use the variable 'sentence' here 
 
    end sub 
 
end class