dポイントプレゼントキャンペーン実施中!

いつも参考にさせていただいています。
ご回答よろしくおねがいします。

新規のフォームにチェックボックスを3つ追加しました。
コントロール配列です。
------frame1--------
| checkbox1(0) |
| checkbox1(1) |
| checkbox1(2) |
--------------------

このときに、

---------------------------------------------
Private Sub Check1_Click(Index As Integer)

Check1(0).Value = 0
Check1(1).Value = 0
Check1(2).Value = 0
Check1(Index).Value = 1

End Sub
---------------------------------------------

以上のようにプログラムを実行すると、
スタック領域エラー(エラー28)が出力されます。
この回避方法について、また原因がおわかりいただけたら
ご教授おねがいできないでしょうか?

OS:WinXP SP3
環境:VB6

A 回答 (2件)

原因は、


Private Sub Check1_Click(Index As Integer)
の中でチェックボックスの値を変えているため、自分自身の手続きを再帰呼び出ししているためです。

対処方法は、最初にすべてのチェックボックスを0にするのではなく、Indexを調べて必要なチェックボックスの値だけを変えるようにしましょう。
    • good
    • 0

Check1_Clickメソッドにフラグを設けてやればご希望のことは可能でしょう



Private Sub Check1_Click(Index As Integer)
  static bflag as Boolean
  ' このメソッドを実行中の場合は処理を中断
  if bflag then exit sub
  ' 実行中のフラグをセット
  bflag = true
  Check1(0).Value = 0
  Check1(1).Value = 0
  Check1(2).Value = 0
  Check1(Index).Value = 1
  ' 処理終了なのでフラグをリセット
  bflag = false
End Sub

といった具合でしょう
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!