オーバーフロー

解決


ひろ  2004-02-18 02:13:55  No: 82095  IP: [192.*.*.*]

現在、仕事でVB6扱っているのですが,
複数あるチェックボックスの数個を押下し
次の画面へ遷移するときに、
動的に画面にそのチェックされたチェックボックスに
紐づいている、項目をループで繰り返してフォームに縦にならべてるのですが、
あまりにその項目が多いとオーバーフローしてしまいます。
  Check1(0).Caption = strColumn(0)
   Label1(0).Caption = tablename
   For j = 1 To UBound(strColumn)
      Load Check1(j)
      With Check1(j)
         .Move .Left, .Top + j * 390
         .Caption = strColumn(j)
         .Visible = True
      End With

      Load Label1(j)
      With Label1(j)
         .Move .Left, .Top + j * 390
         .Caption = tablename
         .Visible = True
      End With
      l = j + 1
   Next j
こんな感じなのですが。
何かフォーム自体にHeightか何かの上限があるのか、
もしくは、ただ単にコードが悪いだけなのかよくわかりません。
よろしければどなたかご教示ください。

編集    削除
魔界の仮面弁士  2004-02-18 02:31:32  No: 82096  IP: [192.*.*.*]

変数 j が、Integer型として宣言されていませんか?
もしそうなら、j が 85以上になった時点で、Moveメソッドの行がオーバーフローしますよ。
(85 * 390 の結果は、Integerの上限である 32767 を超えてしまいます)

>     .Move .Left, .Top + j * 390
この部分を
      .Move .Left, .Top + j * 390!
にしてみてください。
(もしくは、j のデータ型を Long等に変更してください)

編集    削除
ひろ  2004-02-18 02:53:36  No: 82097  IP: [192.*.*.*]

魔界の仮面弁士さん、お早い返事ありがとうございました。
おかげさまで解決することができました。
本当にありがとうございました。

編集    削除