.net修行中21
こんにちは、モンクです。
現在使用しているVb.netはイベントドリブンです。
何らかのアクションに対してリアクションするという形で動作します。
それが便利でもあり曲者でもあるのです。
例えば、画面初期表示と同時にDataGridViewにデータを並べるとします。
またDataGridViewに対して、CellValueChangedイベントで、入力チェックをしているとします。
まず実行するとForm_Loadイベントが発生します。
そのなかでDataGridViewに値を設定すると、逐一(セルに値を設定する度に)CellValueChangedイベントが発生します。
<br /> Private Sub Form_Load(sender As Object, e As EventArgs) Handles MyBase.Load</p> <p> Dim x As Integer = 0<br /> Dim y As Integer = 0</p> <p> '** 10行描画<br /> For y = 0 To 9<br /> dgv(x, y).Value = "Col" & (y + 1).ToString & (x + 1).ToString '** ここで1回目のdgv_CellValueChangedが動く<br /> dgv(x + 1, y).Value = "Col" & (y + 1).ToString & (x + 2).ToString '** ここで2回目のdgv_CellValueChangedが動く(以降10行分動く)<br /> Next</p> <p> End Sub</p> <p> Private Sub dgv_CellValueChanged(sender As Object, e As DataGridViewCellEventArgs) Handles dgv.CellValueChanged</p> <p> Dim x As Integer = dgv.CurrentCellAddress.X<br /> Dim y As Integer = dgv.CurrentCellAddress.Y</p> <p> MessageBox.Show("value=[" & dgv(x,y).Value & "]", "", MessageBoxButtons.OK, MessageBoxIcon.Information)<br /> End Sub</p> <p>
知らぬ間に画面にヘンな値を表示しているケースなどは、同時多発しているイベントによることがあるかもしれません。
バグの素になるので、うまく設計しましょう。
逆に同時多発イベントを念頭に置いて設計することで、効率的な開発も見込めます(プログラムの記述が少なくて済むことがあります)。
うまく活用してください。
最近のコメント