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

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

新規登録して質問してみよう
ただいま回答率
85.48%
イベントハンドラ

マウスのクリックなどの特定の事象(イベント)が発生した時に実行される処理のことをイベントハンドラと呼びます。

VB.NET

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

Q&A

1回答

2227閲覧

VB.NETのVisibleChangedイベントをButtonをクリックするたびに発動させたい。

yurika_21

総合スコア12

イベントハンドラ

マウスのクリックなどの特定の事象(イベント)が発生した時に実行される処理のことをイベントハンドラと呼びます。

VB.NET

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

0グッド

0クリップ

投稿2020/07/31 09:35

前提・実現したいこと

VB.NETで自作のカレンダーを作成しています。
BtnPrevMonthを押すと1か月前のカレンダーを表示させるのですが、その際にVisibleChangeのイベントを発動させたいです。

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

VisibleChangeイベントが発動しない。

該当のソースコード

VB

1VisibleChangeイベントはAddHandlerで発動させています。 2 3 Private Sub Addlabel1DayToF1Day(ByVal startDayAtF1Number As Integer, ByVal totalDaysInMonth As Integer) 4 For Each f1 As Button In listF1Day 5 f1.Controls.Clear() 6 Next 7 '//1日から月の最終日まで 8 For i As Integer = 1 To totalDaysInMonth 9 Dim lbl As New Label 10 lbl.Name = $"lblDay{i}" 11 lbl.AutoSize = False 12 lbl.TextAlign = ContentAlignment.TopLeft 13 lbl.Size = New Size(19, 18) 14 lbl.Tag = New Date(currentDate.Year, currentDate.Month, i) 15 lbl.Text = i 16 lbl.Font = New Font("Microsoft Sans Serif", 8) 17 listF1Day((i - 1) + (startDayAtF1Number - 1)).Controls.Add(lbl) 18 'listF1Day((i)).BackColor = SystemColors.Control 19 listF1Day((i - 1) + (startDayAtF1Number - 1)).Tag = New Date(currentDate.Year, currentDate.Month, i) 'パネルのTagプロパティに日付を入れる 20 21 '//選択中の日付パネル処理 22 If Not listF1Day((i - 1) + (startDayAtF1Number - 1)).BackColor = Color.Yellow And Not GNNO.Text = "" Then 23 listF1Day(New Date(currentDate.Year, currentDate.Month, 1).DayOfWeek + currentDate.Day - 1).BackColor = Color.Yellow '今日の日付パネルを取得 24 ElseIf listF1Day((i - 1) + (startDayAtF1Number - 1)).BackColor = Color.Yellow And GNNO.Text = "" Then 25 listF1Day((i - 1) + (startDayAtF1Number - 1)).BackColor = Color.White 26 'AddHandler lbl.Leave, AddressOf lbl_Leave 27 End If 28 AddHandler lbl.Enter, AddressOf lbl_Click 29 AddHandler lbl.Leave, AddressOf lbl_Leave 30 Next 31 If DateLabel.Text = Today Or Not DateLabel.Text = Today Then 32 '入力があれば日報データ表示 33 Me.DateValue() 34 Else 35 End If 36 37 End Sub

試したこと

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

VisualStudio2017,SQLServer

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

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

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

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

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

Zuishin

2020/07/31 09:57

> VisibleChangeイベントはAddHandlerで発動させています。 発動してないんでしょう?
yurika_21

2020/07/31 10:22

Load時には発動しています。 ボタンを押すと同じように発動させたいのですが、ボタンクリックでは発動しません。。
Zuishin

2020/07/31 10:34

AddHandler はイベントの登録なので、「発動」が「イベントの発行」もしくは「イベントの処理」を示すならそこでは「発動」しません。
Zuishin

2020/07/31 10:43

VisibleChanged はその名の通り Visible が変化したときに発行されます。 Visible 無関係に何か処理をしたいのであれば、その「したい処理」をメソッドとして独立させ、VisibleChanged の時、およびボタンクリックの時に呼び出せばいいでしょう。
yurika_21

2020/07/31 10:49

Dim dayf = DirectCast(sender, Button) Dim ClickDate As Date = dayf.Tag Dim dread As SqlClient.SqlDataReader Dim str As String = String.Empty Try Using conn As New SqlClient.SqlConnection(pubSqlConnectionString) conn.Open() Using cmd As New SqlClient.SqlCommand() cmd.Connection = conn cmd.CommandText = "SELECT TGNSHIDUKE " & ControlChars.NewLine & "FROM Gyomu_Body " & ControlChars.NewLine & "WHERE TGNCRTTN = '" & CM0000.login_Pass & "' " & ControlChars.NewLine dread = cmd.ExecuteReader() Do While dread.Read() Dim iIdx As Integer Dim hiduke As String iIdx = dread.GetOrdinal("TGNSHIDUKE") hiduke = dread(iIdx) If ClickDate.ToString("yyyy/MM/dd") = hiduke Then dayf.BackColor = Color.Aquamarine End If Loop End Using End Using Catch End Try こちらのsenderの部分で苦戦しております。 以上のソースの場合、メソッドとして独立させるにはどのようにすればよろしいでしょうか?
Zuishin

2020/07/31 11:04

Button を引数とするメソッドを新しく作り、イベントハンドラの中で Sender を Button にキャストしてからそれを呼び出せばいいと思います。
guest

回答1

0

ボタンクリックベントに、その実行したい処理を書いていけばいいです。

ボタンのクリック時にはVisibleChangedイベントは発動しません(アタリマエ

投稿2020/07/31 10:31

y_waiwai

総合スコア87774

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

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

yurika_21

2020/07/31 10:39

Dim dayf = DirectCast(sender, Button) Dim ClickDate As Date = dayf.Tag Dim dread As SqlClient.SqlDataReader Dim str As String = String.Empty Try Using conn As New SqlClient.SqlConnection(pubSqlConnectionString) conn.Open() Using cmd As New SqlClient.SqlCommand() cmd.Connection = conn cmd.CommandText = "SELECT TGNSHIDUKE " & ControlChars.NewLine & "FROM Gyomu_Body " & ControlChars.NewLine & "WHERE TGNCRTTN = '" & CM0000.login_Pass & "' " & ControlChars.NewLine dread = cmd.ExecuteReader() Do While dread.Read() Dim iIdx As Integer Dim hiduke As String iIdx = dread.GetOrdinal("TGNSHIDUKE") hiduke = dread(iIdx) If ClickDate.ToString("yyyy/MM/dd") = hiduke Then dayf.BackColor = Color.Aquamarine End If Loop End Using End Using Catch End Try 以上のソースはクリックイベントで発動させる場合、どのようにすればTagを取得することが出来ますでしょうか?
y_waiwai

2020/07/31 11:07

Tagとは?? そもそも、なにをどうしたいってはなしなんでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問