こんにちは、
ただ今、VB.NET・Visual Studio2005・XP SP3で、
MonthCalendarコントロールを使用したWindowsアプリケーションを作成しております。
そこで質問なのですが、カレンダー(DataGridViewで作成)の横に行事名が書いてあるボタンを並べて、
そのボタンを、ドラック&ドロップで、カレンダーの上に持っていき、
更に、そのボタンを右クリックでサイズを変更し、
そのボタンの下にある日付にボタンに書いてある行事をデータベースに登録するというものを作成しております。それで、石飛びの処理(1日空いて次の日にボタンを再配置する)をやっているのですが、ボタンをカレンダーの上を
ダブルクリックで、その場に新規で作成するというものを考えており、ボタンを作成はうまくいったのですが、その新規で作成したボタンを削除するという処理がうまくできなくって困っております。一応、ダブルクリックで新規に作成する処理は、
〜メンバ変数〜
Dim Winter_Vacation_Count As Integer
Dim Winter_Vacation_Btn As New Button()
Dim Winter_Vacation_Count as integer
Private Sub DGV_Cal_MouseDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles DGV_Cal.MouseDoubleClick
〜省略〜
'動的に作成するボタンのインスタンスを生成
Winter_Vacation_Btn = New Button
'追加するButtonのプロパティを設定する
Winter_Vacation_Btn.Name = "Btn_Winter_Vacation" & Winter_Vacation_Count 'Label_Name
Winter_Vacation_Btn.BackColor = Color.SkyBlue 'BackColor
Winter_Vacation_Btn.Font = New Font("MS UI Gothic", 12) 'Font
Winter_Vacation_Btn.ForeColor = Color.Purple 'ForeColor
Winter_Vacation_Btn.Location = New Point(e.X, e.Y) 'Location
Winter_Vacation_Btn.Size = New Size(120, 30) 'Size
Winter_Vacation_Btn.Text = "冬季休暇" 'Text
'行事ボタンを、Formに追加する
DGV_Cal.Controls.Add(Winter_Vacation_Btn)
'Winter_Vacation_Countに、1を足す
Winter_Vacation_Count = Winter_Vacation_Count + 1
'行事ボタンを、最前面にする
Winter_Vacation_Btn.BringToFront()
End Sub
となっており、削除する処理は、複数ある可能性があるので、ボタンで行っています。そのボタンの処理が、
Private Sub Btn_Cancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btn_Cancel.Click
For Each ctrl As Control In DGV_Cal.Controls
If ctrl.Name Like "Btn_Winter*" Then
DGV_Cal.Controls.Remove(ctrl)
End If
Next
となっております。この処理で実行すると、なぜか複数(5〜6個)のボタンを配置すると、いくつか削除されて、いくつかは残ってしますのです。
念のため、確認したのが、一応該当するコントロールが取得されているか、
ListBoxに表示させてみたら、全て取得されていました。
デバックをしてみると、Removeを入れると、このような現象が起こりました。
この解決方法を知っていたら、どなたかぜひご教授下さい。
お願いします。
単純に削除したら Index が振りなおされるからじゃない?
Private Sub Btn_Cancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btn_Cancel.Click
For Each ctrl As Control In DGV_Cal.Controls
Debug.WriteLine("----------------------")
For index As Integer = 0 To DGV_Cal.Controls.Count - 1
Debug.WriteLine(index.ToString & ":" & DGV_Cal.Controls.Item(index).Name)
Next
If ctrl.Name Like "Btn_Winter*" Then
Debug.WriteLine("Remove:" & ctrl.Name)
DGV_Cal.Controls.Remove(ctrl)
End If
Next
End Sub
ツイート | ![]() |