0

このコードのエラーを見つけてください。1時間以上かけて探しました。ここにコードがあります..

Public Class Form1
Dim incomingip() As String
Dim incomingopt() As String

Private Sub btnloadall_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnloadall.Click
    Timer1.Start()
    rtb.Clear()
End Sub

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    ProgressBar1.Increment(5)
    If ProgressBar1.Value = 10 Then
        sPort.Write("get ip" & vbCr)
    End If
    If ProgressBar1.Value = 20 Then
        Call btnip_Click(sender, New System.EventArgs)
    End If
    If ProgressBar1.Value = 30 Then
        rtb.Clear()
    End If
    If ProgressBar1.Value = 40 Then
        sPort.Write("get opt" & vbCr)
    End If
    If ProgressBar1.Value = 50 Then
        Call btnopt_Click(sender, New System.EventArgs)
    End If
    'If ProgressBar1.Value = 40 Then
    '    rtb.Clear()
    'End If

    If ProgressBar1.Value = ProgressBar1.Maximum Then
        Timer1.Stop()
    End If
End Sub

ここでは、rtb に何かを書き込むたびに、常にそれをクリアするので、変数は最初に表示される変数を読み取らないようにします。

Private Sub btnip_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnip.Click

    incomingip = stringOfRtb.Split(ControlChars.CrLf.ToCharArray) ''vcrlf splitter
    ''ip parameters
    ip = incomingip(2).Split("="c)
    txtIP.Text = ip(1)

    ip = incomingip(3).Split("="c)
    txtMask.Text = ip(1)

    ip = incomingip(5).Split("="c)
    txtHost.Text = ip(1)

    ip = incomingip(4).Split("="c)
    txtDfg.Text = ip(1)

    ip = incomingip(10).Split("="c)
    txtBackupIP.Text = ip(1)

    ip = incomingip(1).Split("="c)
    cboDhcp.Text = ip(1)


End Sub

分割された文字列が rtb から別のテキスト ボックスに正常に表示されるようになりました。

Private Sub btnopt_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnopt.Click
    incomingopt = stringOfRtb.Split(ControlChars.CrLf.ToCharArray) ''vcrlf splitter
    opt = incomingopt(0).Split("="c)
    txtJointimer.Text = opt(1)

    opt = incomingopt(1).Split("="c)
    txtReplace.Text = opt(1)

    opt = incomingopt(2).Split("="c)
    txtDeviceID.Text = opt(1)

    opt = incomingopt(3).Split("="c)
    txtPassword.Text = opt(1)

    opt = incomingopt(4).Split("="c)
    txtFormat.Text = opt(1)

    opt = incomingopt(5).Split("="c)
    txtSignal.Text = opt(1)

    opt = incomingopt(6).Split("="c)
    txtAverage.Text = opt(1)
End Sub

このイベントは同じ文字列を表示します! 異なるインスタンスを宣言しましたが、このイベントは btnip から文字列を取得します。私がこれから得たいものではありません。ここでincomingipを使用したようです。私は何かを見ていませんか?

4

1 に答える 1

1

私はそれを解決しました。のようだ

Public stringOfRtb as String = Form1.rtb.text

グローバル クラスからのデータは上書きされません。ここにいる他の人からのコメントのように、グローバルを使用して関数内で宣言する方が本当に良いです。これが私がしたことです..

Private Sub btnopt_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnopt.Click
    Dim rtbOpt As String = rtb.Text
    incomingopt = rtbOpt.Split(ControlChars.CrLf.ToCharArray) ''vcrlf splitter
    opt = incomingopt(0).Split("="c)
    txtJointimer.Text = opt(1)

    opt = incomingopt(1).Split("="c)
    txtReplace.Text = opt(1)

    opt = incomingopt(2).Split("="c)
    txtDeviceID.Text = opt(1)

    opt = incomingopt(3).Split("="c)
    txtPassword.Text = opt(1)

    opt = incomingopt(4).Split("="c)
    txtFormat.Text = opt(1)

    opt = incomingopt(5).Split("="c)
    txtSignal.Text = opt(1)

    opt = incomingopt(6).Split("="c)
    txtAverage.Text = opt(1)
End Sub

今では動作します。

于 2013-11-08T07:13:28.883 に答える