投稿者 イヨ  (社会人) 投稿日時 2020/10/5 17:24:40
いつもお世話になっております
下記コードは前回質問したときのコードです。
ちょっとアレンジや参考にして遊んでみたところそのままでは動くのですが
http://rucio.cloudapp.net/ThreadDetail.aspx?ThreadId=30546

★が付いているところで(自分が変えたところ)
System.OverflowException: '算術演算の結果オーバーフローが発生しました。'
と、出てきます。調べた結果型が合わないからでるらしく型を変更してみましたり、
エラー対処してみましたがいい方法が思いつかなかったです。。

ボタンをクリックした二回目以降factor変数が0のままでした。
こういう時どうすればいいでしょうか?
宜しくお願いいたしますmom


(△マークのところを素直に60や40などにしておくと出ないのですが。。。)

Private Sub PictureBox2(sender As Object, e As EventArgs) Handles PictureBox2.Click
  Dim sp As System.Drawing.Point = System.Windows.Forms.Cursor.Position
    Dim cp As System.Drawing.Point = Me.PointToClient(sp)
    Dim x As Integer = cp.X
    Dim y As Integer = cp.Y
        Dim newX As Integer = RoundMultiple(x,60/100 * Form4.TrackBar2.Value)△
        Dim newY As Integer = RoundMultiple(y, 40/100 * Form4.TrackBar2.Value)

    省略(↑上記座標を使いGraphicsで円とか書いておえかきしています)

        Exit Sub




 Private Function RoundMultiple(value As Integer, factor As Integer) As Integer
        Dim rate As Double = value / factor
        Dim value以下で最も大きい倍数 As Integer = CInt(Math.Floor(rate) * factor)★
        Dim value以上で最も小さい倍数 As Integer = CInt(Math.Ceiling(rate) * factor)
            Dim 差1 As Integer = value - value以下で最も大きい倍数
            Dim 差2 As Integer = value以上で最も小さい倍数 - value
            If 差1 < 差2 Then
                Return value以下で最も大きい倍数
            Else
                Return value以上で最も小さい倍数
            End If