前提・実現したいこと
VB.NETで自作のカレンダーを作成しています。
日にちを格納しているパネルに対してクリックイベントは発生させることは出来ているのですが、Leaveイベントが発生しないため、困っております。
クリックイベントでクリックしてパネルの背景色を変えているのですが、Leaveイベントでクリックしているパネル以外の背景色は白にしたいです。
現在は、クリックしたパネルの背景色が変わったままで残ってしまっている状態です。
発生している問題・エラーメッセージ
クリックイベントで変えている背景色を白に戻したいが、Leaveイベントが発生しないため、クリックしたパネルの背景色が変わったまま残っています。
該当のソースコード
VB
1こちらはカレンダーを生成しているソースになります。 2'************************************************** 3 'カレンダーの今日の日付を取得 4 '************************************************* 5 Private listF1Day As New List(Of FlowLayoutPanel) 6 Private currentDate As DateTime = DateTime.Today 7 8 '************************************************** 9 '月の始まりの日を取得 10 '************************************************* 11 Private Function GetFirstDayOfWeekOfCurrentDate() As Integer 12 Dim firstDayOfMonth As DateTime = New Date(currentDate.Year, currentDate.Month, 1) 13 Return firstDayOfMonth.DayOfWeek + 1 14 End Function 15 '************************************************** 16 '月の最終日を取得 17 '************************************************* 18 Private Function GetTotalDaysOfCurrentDate() As Integer 19 Dim firstDayOfCurrentDate As DateTime = New Date(currentDate.Year, currentDate.Month, 1) 20 Return firstDayOfCurrentDate.AddMonths(1).AddDays(-1).Day 21 End Function 22 '************************************************** 23 'DateLabelの表示形式を指定 24 '************************************************* 25 Private Sub DisplayCurrentDate() 26 DateLabel.Text = currentDate.ToString("yyyy/MM/dd") 27 Addlabel1DayToF1Day(GetFirstDayOfWeekOfCurrentDate(), GetTotalDaysOfCurrentDate()) 28 End Sub 29 '************************************************** 30 '各ボタン(月、日)設定 31 '************************************************* 32 Private Sub PrevMonth() 33 currentDate = currentDate.AddMonths(-1) 34 DisplayCurrentDate() 35 End Sub 36 37 Private Sub NextMonth() 38 currentDate = currentDate.AddMonths(1) 39 DisplayCurrentDate() 40 End Sub 41 42 Private Sub ToMonth() 43 currentDate = DateTime.Today 44 DisplayCurrentDate() 45 End Sub 46 47 Private Sub PrevDay() 48 currentDate = currentDate.AddDays(-1) 49 DisplayCurrentDate() 50 End Sub 51 52 Private Sub NextDay() 53 currentDate = currentDate.AddDays(1) 54 DisplayCurrentDate() 55 End Sub 56 '************************************************** 57 'カレンダー内の日付Panelを生成 58 '************************************************* 59 Private Sub GenerateDayPanel(ByVal totalDays As Integer) 60 f1Days.Controls.Clear() 61 listF1Day.Clear() 62 For i As Integer = 1 To totalDays 'f1=パネル一枚一枚の設定 63 Dim f1 As New FlowLayoutPanel 64 f1.Name = $"f1Day{i}" 65 f1.Size = New Size(46, 23) 66 f1.BackColor = Color.White 67 f1Days.Controls.Add(f1) 68 f1.BorderStyle = BorderStyle.FixedSingle 69 f1.Cursor = System.Windows.Forms.Cursors.Hand 70 listF1Day.Add(f1) 71 72 'AddHandler f1.Validated, AddressOf f1_Leave 73 AddHandler f1.Click, AddressOf Day_Click 74 75 Next 76 End Sub 77 Event sample() 78 Sub f1_Leave() 79 80 MsgBox("1") 81 End Sub 82 '************************************************** 83 'カレンダー内のPanelクリック時イベント 84 '************************************************* 85 Private Sub Day_Click(sender As Object, e As EventArgs) 86 87 'クリックされたオブジェクトをFlowLayoutPanel型にキャストする 88 Dim dayf = CType(sender, FlowLayoutPanel) 89 Dim ClickDate As Date = dayf.Tag 90 DateLabel.Text = ($"{ClickDate.ToString("yyyy/MM/dd")}") 91 92 93 dayf.BackColor = Color.Yellow 94 If DateLabel.Text = Today Or Not DateLabel.Text = Today Then 95 '入力があれば日報データ表示 96 Me.DateValue() 97 Else 98 End If 99 End Sub 100 101 102 103 104 105 '************************************************** 106 'カレンダー内のPanelに日付のLabelを生成 107 '************************************************* 108 Private Sub Addlabel1DayToF1Day(ByVal startDayAtF1Number As Integer, ByVal totalDaysInMonth As Integer) 109 For Each f1 As FlowLayoutPanel In listF1Day 110 f1.Controls.Clear() 111 Next 112 '//1日から月の最終日まで 113 For i As Integer = 1 To totalDaysInMonth 114 Dim lbl As New Label 115 lbl.Name = $"lblDay{i}" 116 lbl.AutoSize = False 117 lbl.TextAlign = ContentAlignment.TopLeft 118 lbl.Size = New Size(19, 18) 119 lbl.Tag = New Date(currentDate.Year, currentDate.Month, i) 120 'lbl.BackColor = SystemColors.Control 121 lbl.Text = i 122 lbl.Font = New Font("Microsoft Sans Serif", 8) 123 listF1Day((i - 1) + (startDayAtF1Number - 1)).Controls.Add(lbl) 124 'listF1Day((i)).BackColor = SystemColors.Control 125 listF1Day((i - 1) + (startDayAtF1Number - 1)).Tag = New Date(currentDate.Year, currentDate.Month, i) 'パネルのTagプロパティに日付を入れる 126 127 '//選択中の日付パネル処理 128 If Not listF1Day((i - 1) + (startDayAtF1Number - 1)).BackColor = Color.Yellow Then 129 listF1Day(New Date(currentDate.Year, currentDate.Month, 1).DayOfWeek + currentDate.Day - 1).BackColor = Color.Yellow '今日の日付パネルを取得 130 ElseIf listF1Day((i - 1) + (startDayAtF1Number - 1)).BackColor = Color.Yellow Then 131 listF1Day((i - 1) + (startDayAtF1Number - 1)).BackColor = Color.White 132 listF1Day(New Date(currentDate.Year, currentDate.Month, 1).DayOfWeek + currentDate.Day - 1).BackColor = Color.Yellow '今日の日付パネルを取得 133 End If 134 AddHandler lbl.Click, AddressOf lbl_Click 135 136 Next 137 If DateLabel.Text = Today Or Not DateLabel.Text = Today Then 138 '入力があれば日報データ表示 139 Me.DateValue() 140 141 Else 142 End If 143 144 End Sub 145 146 '************************************************** 147 'カレンダー内のLabelクリック時イベント 148 '************************************************* 149 Private Sub lbl_Click(sender As Object, e As EventArgs) 150 Dim day = DirectCast(sender, Label) 151 Dim ClickDate As Date = day.Tag 152 DateLabel.Text = ($"{ClickDate.ToString("yyyy/MM/dd")}") 153 If DateLabel.Text = Today Or Not DateLabel.Text = Today Then 154 '入力があれば日報データ表示 155 Me.DateValue() 156 157 Else 158 End If 159 End Sub 160 '************************************************** 161 '各ボタン(月)のイベント 162 '************************************************* 163 Private Sub btnPrevMonth_Click(sender As Object, e As EventArgs) Handles BtnPrevMonth.Click 164 PrevMonth() 165 End Sub 166 167 Private Sub btnNextMonth_Click(sender As Object, e As EventArgs) Handles BtnNextMonth.Click 168 NextMonth() 169 End Sub 170 171 Private Sub btnToday_Click(sender As Object, e As EventArgs) Handles BtnToday.Click 172 ToMonth() 173 End Sub
試したこと
ValidatedやValidatingを試しましたが、イベントは発生しませんでした。
補足情報(FW/ツールのバージョンなど)
VisualStudio2017,SQLServer
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/30 00:44