0

時間文字列( "hh \:mm \:ss \、fff"-例: "00:00:00,100")をパーツに変換する関数を作成します
strTime = "00:00:00,100" =
h int = 0
m int = 0
int=0
ミリ秒int=100


関数:

Public Function ShowInLabel(ByVal TEXT As String, ByVal time As String, ByVal startTime As Boolean) As Boolean
        On Error Resume Next
        Dim sss As String
        sss = time
        Dim start As String = StrReverse(sss)
        start = StrReverse(start.Substring(0, 3))
        Dim s As Integer
        s = Integer.Parse(start)
        Dim secstart As String = StrReverse(sss).Substring(0, 6)
        secstart = StrReverse(secstart)
        Dim secs As Integer = Integer.Parse(secstart.Substring(0, 2))
        Dim hurs As Integer = Integer.Parse(sss.Substring(0, 2))
        Dim mins As Integer = Integer.Parse(StrReverse(StrReverse(sss.Substring(0, 5)).Substring(0, 2)))

        Dim stopWatch As New Stopwatch()
        stopWatch.Start()
noh:
        If stopWatch.Elapsed.Hours = hurs Then
            GoTo yesh
        Else
            GoTo noh
        End If
yesh:
        If stopWatch.Elapsed.Minutes = mins Then
            GoTo yesm
        Else
            GoTo yesh
        End If
yesm:
        If stopWatch.Elapsed.Seconds = secs Then
            GoTo yess
        Else
            GoTo yesm
        End If
yess:

        If stopWatch.Elapsed.Milliseconds > s Or stopWatch.Elapsed.Milliseconds = s Then
            GoTo done
        Else
            GoTo yess
        End If
done:
        If startTime = False Then
            Label1.Text = ""
        Else
            Label1.Text = TEXT
        End If

        Return True

    End Function



例:

ShowInLabel("SubTitle", "00:00:00,100", True)

関数
は機能しますが、アプリケーションを実行している関数がスタックしている場合、関数がtrueを返すまで
なぜそれが発生するのですか?

4

1 に答える 1

1

あなたがする必要があるのは、次のようなものです:

    Dim time As Date = DateTime.ParseExact("00:01:02,123", "hh:mm:ss,fff", CultureInfo.InvariantCulture)
    Dim h As Integer = time.Hour
    Dim m As Integer = time.Minute
    Dim sec As Integer = time.Second
    Dim millisec As Integer = time.Millisecond

しかし、あなたが達成しようとしていることをよく知っているので:)、あなたが本当に必要としているのはこれだと思います:

    Dim time As Date = DateTime.ParseExact("00:01:02,123", "hh:mm:ss,fff", CultureInfo.InvariantCulture)
    Dim startTime As Date = DateTime.ParseExact("00:00:00,000", "hh:mm:ss,fff", CultureInfo.InvariantCulture)
    Dim elapsed As TimeSpan = time - startTime
    Dim totalMilliseconds As Integer = CType(elapsed.TotalMilliseconds, Integer)

同様に、各字幕の開始時間と終了時間を合計ミリ秒に変換し、その方法で比較することもできます。

他の人が指摘しているように、On Error Resume Next は、VB6 コードとの下位互換性のために VB.NET でのみ実際に使用できます。代わりに、Try/Catch ブロックを使用する必要があります。ただし、メソッド全体のすぐ上にレジュメを配置するだけでは、VB6 でさえ、決して良い習慣とは見なされませんでした。メソッド全体の周りに try/catch ブロックを配置することも悪い考えと見なされるのと同じです。

同様に、GoTo は、ほぼすべてのプログラマーの感性で行うことができる最もひどいことです。ループ、if/else ブロック、コードを個別のメソッドに分割するなどの他のオプションを検討し、GoTo は絶対に避けてください。

于 2012-06-14T13:38:06.923 に答える