0

夏の間、Visual Basicをより流暢に話せるように取り組んでいるので、次のVisualBasicクラスに向けてまだ鋭敏です。私の先生は変数を調べましたが、ローカルスコープでのみです。

私はいたるところを見てきましたが、必要なものを正確に見つけることができません。私はある種の目覚まし時計を作っています、そして私は分配列と時間配列を移入するためにこのコードを持っています。

Public Class Form1 
    Public Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.clockTimer.Interval = 1 * 1000
        Me.clockTimer.Enabled = True


        Dim hourArray(0 To 11) As String
        For i As Integer = 1 To 12
            If i.ToString.Length < 2 Then
                hourArray(i - 1) = "0" & i
            Else
                hourArray(i - 1) = i
            End If
        Next

        Dim minuteArray(0 To 59) As String
        For i As Integer = 0 To 59
            If i.ToString.Length < 2 Then
                minuteArray(i) = "0" & i
            Else
                minuteArray(i) = i
            End If
        Next

        hourLabel.Text = hourArray(0)
        minuteLabel.Text = minuteArray(0)

    End Sub

(注:「0」を追加すると、時計の表示に「1」ではなく「01」が表示されます。)

現在、フォームの読み込み時にこれが発生しています(このプロジェクトでは1つのフォームのみ)が、グローバルスコープまたはパブリックスコープはありません。hourArrayプログラムの以降にアクセスできるようにしたいのですがminuteArray、フォームの読み込み時にこれが発生します。どうすればいいですか?また、私が説明している可変スコープは何ですか?(つまり、フォーム全体のスコープ)。

ありがとう。

4

3 に答える 3

1

あなたは自分のクラスの構造について話しませんでした。いずれかの方法。変数hourArrayとminuteArrayをpublicとして宣言します。クラスの最初でそれらを宣言し、フォームロードメソッドでそれらを初期化します。

編集コード例を追加しました。

Public Class Form1
    Dim hourArray(0 To 11) As String 'Declaration here
    Dim minuteArray(0 To 59) As String
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        For i As Integer = 1 To 12
            If i.ToString.Length < 2 Then
                hourArray(i - 1) = "0" & i
            Else
                hourArray(i - 1) = i
            End If
        Next
        For i As Integer = 0 To 59
            If i.ToString.Length < 2 Then
                minuteArray(i) = "0" & i
            Else
                minuteArray(i) = i
            End If
        Next
    End Sub

    Private Sub RadioButton1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton1.CheckedChanged
        hourArray(1) = "x"
        minuteArray(1) = "y"
    End Sub
End Class

それが役に立てば幸い !!

于 2012-06-13T03:39:40.427 に答える
0

あなたの学習以来、私はそれらをどこに置くかをあなたに教えるつもりです

ただし、後で、配列を削除して時間を直接取り、必要に応じて0で埋める必要があります。これは、配列がない場合です。

このようにクラスとサブの間にこれらを置きます

 Public Class Form1 
     private hourArray(0 To 11) As String
     private minuteArray(0 To 59) As String
     Public Sub Form1_Loa

これらの配列を外部で使用する場合は、次のようなパブリックプロパティを作成する必要があります

Public readonly Property hour As String()
    Get
         return hourArray
    End Get
End Property
于 2012-06-13T04:14:43.173 に答える
0

モジュールレベルのスコープについて説明しています。

上記のリンクから:

便宜上、単一用語のモジュールレベルは、モジュール、クラス、および構造に等しく適用されます。このレベルで要素を宣言するには、宣言ステートメントをプロシージャまたはブロックの外側、ただしモジュール、クラス、または構造内に配置します。

モジュールレベルで宣言を行う場合、選択したアクセスレベルによってスコープが決まります。モジュール、クラス、または構造を含む名前空間もスコープに影響します。

プライベート(Visual Basic)アクセスレベルを宣言する要素は、そのモジュールのすべてのプロシージャで使用できますが、別のモジュールのコードでは使用できません。アクセスレベルのキーワードを使用しない場合、モジュールレベルのDimステートメントはデフォルトでPrivateになります。ただし、DimステートメントでPrivateキーワードを使用すると、スコープとアクセスレベルをより明確にすることができます。

だからあなたの場合、私はこのようなことをします

Public Class Form1  
    
    Dim hourArray(0 To 11) As String   'These variables are private to your Class
    Dim minuteArray(0 To 59) As String 

    Public Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
        Me.clockTimer.Interval = 1 * 1000  
        Me.clockTimer.Enabled = True 

        For i As Integer = 1 To 12 
            If i.ToString.Length < 2 Then 
                hourArray(i - 1) = "0" & i 
            Else 
                hourArray(i - 1) = i 
            End If 
        Next 

        For i As Integer = 0 To 59 
            If i.ToString.Length < 2 Then 
                minuteArray(i) = "0" & i 
            Else 
                minuteArray(i) = i 
            End If 
        Next 

        hourLabel.Text = hourArray(0) 
        minuteLabel.Text = minuteArray(0) 

    End Sub 
于 2012-06-13T04:33:25.933 に答える