0

最近、vbプロジェクトのフォーム内のサブの1つにいくつかの変更を加えましたが、フォームを読み込もうとしているときにエラーが発生します。フォームとの関係についてはほとんどわかりません。そのため、この問題を解決するためにどこから始めればよいのかわかりませんstart indexParameter name表示されるエラーメッセージは次のとおりです。

An error occurred creating the form. See Exception.InnerException for details.  The error is: StartIndex cannot be less than zero.
Parameter name: startIndex

私が変更したSubは、以下のコードの最後のSubですTextBox1changed_textchanged。テキストボックスに入力できる文字を制限するために、最後の5行を除くすべてを追加しました。この新しいコードは別のフォーラムページから編集されているため、正しく機能するはずですが、フォームが実行されなくなるため、確信が持てません。

Public Class frmAddQuantity

Private Sub frmFieldMaster_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    cmbStateRateSumRatio.Items.Clear()
    cmbStateRateSumRatio.Items.Insert(0, "State")
    cmbStateRateSumRatio.Items.Insert(1, "Rate")
    cmbStateRateSumRatio.Items.Insert(2, "Sum")
    cmbStateRateSumRatio.Items.Insert(3, "Ratio")


End Sub

Private Sub bttAddQUAtoDatabase_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bttAddQUAtoDatabase.Click

    AddQuantity("'" & TextBox1.Text & "', '" & TextBox2.Text & "', '" & cmbStateRateSumRatio.Text & "'")

    InitialiseAll()
    frmFieldMaster.InitialiseNewParameter()
    Me.Close()

End Sub

Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox2.TextChanged

    If TextBox2.Text <> "Enter SI Units" Then
        If cmbStateRateSumRatio.SelectedIndex <> -1 Then
            bttAddQUAtoDatabase.Enabled = True
        End If
    End If
End Sub

Private Sub cmbStateRateSumRatio_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmbStateRateSumRatio.SelectedIndexChanged

    If TextBox1.Text <> "Enter Quantity" Then
        If TextBox2.Text <> "Enter SI Units" Then
            bttAddQUAtoDatabase.Enabled = True
        End If
    End If

End Sub

Private Sub TextBox2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox2.TextChanged


    Dim charactersAllowed As String = " abcdefghijklmnopqrstuvwxyz1234567890^-*()."
    Dim Text As String = TextBox2.Text
    Dim Letter As String
    Dim SelectionIndex As Integer = TextBox2.SelectionStart
    Dim Change As Integer




    Letter = TextBox2.Text.Substring(SelectionIndex - 1, 1)
    If Letter = "/" Then
        Text = Text.Replace(Letter, "^(-")
        SelectionIndex = SelectionIndex - 1
    End If



    Letter = TextBox2.Text.Substring(SelectionIndex - 1, 1)
    If charactersAllowed.Contains(Letter) = False Then
        Text = Text.Replace(Letter, String.Empty)
        Change = 1
    End If


    TextBox2.Text = Text
    TextBox2.Select(SelectionIndex - Change, 0)

    If TextBox1.Text <> "Enter Quantity" Then
        If cmbStateRateSumRatio.SelectedIndex <> -1 Then
            bttAddQUAtoDatabase.Enabled = True
        End If
    End If

End Sub

エンドクラス

4

2 に答える 2

1

例外がスローされたときに停止するようにデバッガーに指示します。デバッグ+例外、CLR例外の[スロー]チェックボックスをオンにします。

この例外のスニペットには適切な候補があります。

Letter = TextBox1.Text.Substring(SelectionIndex - 1, 1)

テキストボックスが空であるか、SelectionStartプロパティが0である可能性に対処する必要があります。これにより、常に「StartIndexをゼロ未満にすることはできません」というコードが爆破されます。

于 2012-09-06T12:18:05.987 に答える
0
Private Const AllowedChars = " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890^-*()."

Private Sub TxtSIUnit_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtSIUnit.KeyPress
    If e.KeyChar >= " "c AndAlso Not AllowedChars.Contains(e.KeyChar) Then e.Handled = True
End Sub

Private Sub TxtSIUnit_KeyPress2(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtSIUnit.KeyPress
    Dim selectstart
    If e.KeyChar = "/" Then
        e.Handled = True
        selectstart = txtSIUnit.SelectionStart
        txtSIUnit.SelectedText = "*^-1"
        txtSIUnit.Select(selectstart + 1, 0)
    End If
End Sub

このコードを使用して、上記の問題を解決しました。.textchanged以前使用していた問題を解決するために使用したハンドルを使用する代わりに.keypress。フォームの読み込み中にテキストボックス内のテキストが変更されていたため、テキストの開始インデックスに問題が発生していました。平均値のみのユーザー入力を使用.keypressすると、コードが実行され、ロード時のエラーが回避されます。

于 2012-11-06T09:15:27.027 に答える