Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
作成予定のボタンの動作で、MouseDownなどができないか
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=30476#CommentId83879
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
kojiro
 (社会人)
投稿日時
2020/3/31 14:39:47
るきおさんの回答で、完全に動作しました。驚きました。魔界さんのおっしゃる点は、確認しておりませんん。ごめんなさい。以下のように、tabを作成し、その中にボタンを配置して、同様に記述してみました。
Imports System.Windows.Forms
Imports Microsoft.Win32
Imports System.Drawing
Imports System.Drawing.Imaging
Public Class Form1
Dim button As System.Windows.Forms.Button
Dim btnar As New List(Of Button)
Dim tb As New System.Windows.Forms.TabControl
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim tb As New System.Windows.Forms.TabControl
Dim i As Integer
With tb
.Name = "TabControl1"
.Left = 20 '470
.Top = 20
.Width = 250
.Height = 220
.Visible = True
End With
Controls.Add(tb)
For i = 0 To 2
Dim tab As New TabPage
tab.UseVisualStyleBackColor = True '色が白くなります
tab.Text = CStr(i) ' Cell_x2) '"tab" & CStr(i + 1) 'TabPageの表題です
tab.Name = "tabpage" & CStr(i + 1) 'TabPageに名前を付けます
'tb.Add(tab) 'TabPageをリストにします
Me.Controls("TabControl1").Controls.Add(tab) 'TabPageをコントロールにAddします
Next
Dim str_c As String
For i = 0 To 2
Dim tab_name As String = "tabpage" & CStr(i + 1)
For k = 1 To 3 '************* 7
'------------------------------------------------------
button = New System.Windows.Forms.Button()
str_c = CStr(i) & CStr(k)
button.Name = str_c
button.Text = str_c
button.Location = New Point(20 + 70 * (k - 1), 50)
button.Size = New System.Drawing.Size(70, 20)
btnar.Add(button)
tb.Controls(tab_name).Controls.Add(button)
AddHandler button.Click, AddressOf Me.Button_Click 'system_SessionEnding 'EventHandler
AddHandler button.MouseUp, AddressOf Button_MouseUp 'system_SessionEnding 'EventHandler
AddHandler button.MouseDown, AddressOf Button_MouseDown 'system_SessionEnding 'EventHandler
Next
Next
End Sub
Private Sub Button_Click(sender As Object, e As EventArgs)
'クリックされたボタンのNameを表示する
MessageBox.Show(CType(sender, System.Windows.Forms.Button).Name)
End Sub
Private Sub Button_MouseUp(sender As Object, e As MouseEventArgs)
'イベントを発生させたボタンを取得します。
'これはこの瞬間のマウスの座標とは関係なくMouseDownを発生させたボタンを同じです。
Dim eventSourceControl As Button = DirectCast(sender, Button)
'この瞬間のマウスの位置の下にあるコントロールを取得します。
Dim xInParent As Integer = e.Location.X + eventSourceControl.Location.X
Dim yInParent As Integer = e.Location.Y + eventSourceControl.Location.Y
Dim locationInParent As New Point(xInParent, yInParent)
Dim controlMouseOn As Control = Me.GetChildAtPoint(locationInParent)
'マウスの下に何かコントロールがあるのであれば、それの背景色を変更します。
If controlMouseOn IsNot Nothing Then
controlMouseOn.BackColor = Color.Blue
End If
End Sub
Private Sub Button_MouseDown(sender As Object, e As MouseEventArgs)
DirectCast(sender, Button).BackColor = Color.Red
End Sub
End Class
MouseDownで赤くはなるのですが、MouseUpで青くはなりません。おっしゃるように、 Me.GetChildAtPoint(locationInParent)が動いていないのかもしれません。