質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

1回答

1005閲覧

VB.NET自作カレンダーで登録されている日にちのパネルの背景色を変えたい。

yurika_21

総合スコア12

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2020/07/30 05:01

編集2020/07/30 05:32

前提・実現したいこと

VB.NETで自作のカレンダーを作成しています。
画面Loadの際にSQLServerに登録がある日付のボタンの色を変更したいのですが、方法がわかりません。
何卒お力添えいただけると幸いです。

クリックイベントでクリックした日にちを取得することは出来ております。

発生している問題・エラーメッセージ

SQLのSELECTを使うことはわかるが、検索条件がわかりません。

該当のソースコード

VB

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

試したこと

補足情報(FW/ツールのバージョンなど)

VisualStudio2017,SQLServer

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YAmaGNZ

2020/07/30 05:10

検索条件は「その日」なんじゃないんですかね? その日で検索して、あれば○○色、なければ△△色ってことなのでは?
yurika_21

2020/07/30 05:20

listF1Day((i - 1) + (startDayAtF1Number - 1)).Tagと登録されている日で検索すればよろしいのでしょうか? 申し訳ございません。あまりにも無知で情けないです。。
YAmaGNZ

2020/07/30 05:27

クリックされた日に予定があるかという話なのですよね? そうなると検索条件はクリックされた日なのではないですか?
yurika_21

2020/07/30 05:31

誤解を招き、申し訳ございません! Load時にカレンダーのパネルに登録済みの日付なら色を変更したいです。。 クリック以外での日付を取得する方法はありますでしょうか?
YAmaGNZ

2020/07/30 05:56

そうなると、カレンダーが表示された時に表示されている期間が対象ですよね。 その期間(例えば2020/07/01~2020/07/31)が検索条件では?
yurika_21

2020/07/30 06:08

listF1Day((i - 1) + (startDayAtF1Number - 1)).Tag と登録されている日付をForで回して比べいくという認識でよろしいでしょうか?
YAmaGNZ

2020/07/30 06:21

提示されたソースは確認していないので表示されるのがどのような期間か分かりませんし、どのような構造でデータを保持されているのか知りませんので、ループして何回もSQLを実行すべきなのか、検索条件で範囲指定して得られたレコードをループして確認すべきなのかは分かりません。 ただ、後者のほうがいいとは思います。
KoichiSugiyama

2020/07/31 07:29

取得しようとしているデータが入ったデータベースのテーブル定義も一緒に開示していただいた方が、回答する側もアドバイスをしやすいと思います。
guest

回答1

0

ベストアンサー

SQLServerからデータは取得出来ているという前提で大丈夫でしょうか?

TagにDateTime値を設定してるようなので、DBから取り出したDateTime値と比較して一致したボタンの色を変えればいいかと思います。

VBNET

1'SQLServerから取り出したDateTime値を年月日だけ取りだして作り直す 2Dim dateDB = (SQLServerから取得したDateTime値) 3dateDB = New DateTime(dateDB.Year, dateDB.Month, dateDB.Day) 4 5'ボタンのTagのDateTime値と一致したボタンの色を変える 6For Each btn In listF1Day 7 Dim dateBtn = DirectCast(btn.Tag, DateTime) 8 If dateBtn = dateDB Then 9 btn.BackColor = (変えたい色) 10 End If 11Next

投稿2020/07/31 13:12

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問