Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 将透明控件用作不可见触发器的最佳方法_Vb.net_Button_Controls_Picturebox_Invisible - Fatal编程技术网

Vb.net 将透明控件用作不可见触发器的最佳方法

Vb.net 将透明控件用作不可见触发器的最佳方法,vb.net,button,controls,picturebox,invisible,Vb.net,Button,Controls,Picturebox,Invisible,一旦我开发了一个vb6代码,使用透明控件(不记得我是否使用按钮或图标),坐标作为不可见的标签和不可见的标签,在群发照片上显示每个电话的名字,就像facebook一样。现在我正试图在vb.net上重新创建相同的代码,但我无法让它工作 如果我使用带有透明背景色、无文本、无边框、平面样式等的按钮来标记照片区域,当我将鼠标移到控件上时,这些按钮将变得不透明。如果禁用,则鼠标悬停功能将不可见 如果我使用空的PictureBox来代替相同的purpouse,因为它们是空的,它们在运行时也会变得不可见,因为“

一旦我开发了一个vb6代码,使用透明控件(不记得我是否使用按钮或图标),坐标作为不可见的标签和不可见的标签,在群发照片上显示每个电话的名字,就像facebook一样。现在我正试图在vb.net上重新创建相同的代码,但我无法让它工作

如果我使用带有透明背景色、无文本、无边框、平面样式等的按钮来标记照片区域,当我将鼠标移到控件上时,这些按钮将变得不透明。如果禁用,则鼠标悬停功能将不可见

如果我使用空的PictureBox来代替相同的purpouse,因为它们是空的,它们在运行时也会变得不可见,因为“鼠标悬停”功能


我不知道该用哪个空的或看不见的控件来实现这个结局。有什么建议吗?

以下是我在评论中提到的一个例子:

Public Class Form1

    Private ReadOnly actionsByRectangle As New Dictionary(Of Rectangle, Action)

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        'If the user clicks near the top, left corner, display a message.
        actionsByRectangle.Add(New Rectangle(10, 10, 100, 100),
                               Sub() MessageBox.Show("Hello World"))

        'If the user clicks near the bottom, right corner, minimise the form.
        actionsByRectangle.Add(New Rectangle(ClientSize.Width - 110,
                                             ClientSize.Height - 110,
                                             100,
                                             100),
                               Sub() WindowState = FormWindowState.Minimized)
    End Sub

    Private Sub Form1_MouseClick(sender As Object, e As MouseEventArgs) Handles Me.MouseClick
        For Each rectangle As Rectangle In actionsByRectangle.Keys
            If rectangle.Contains(e.Location) Then
                'We have found a rectangle containing the point that was clicked so execute the corresponding action.
                actionsByRectangle(rectangle).Invoke()

                'Don't look for any more matches.
                Exit For
            End If
        Next
    End Sub

    'Uncomment the code below to see the click targets drawn on the form.
    'Private Sub Form1_Paint(sender As Object, e As PaintEventArgs) Handles Me.Paint
    '    For Each rectangle As Rectangle In actionsByRectangle.Keys
    '        e.Graphics.DrawRectangle(Pens.Black, rectangle)
    '    Next
    'End Sub

End Class

请注意,我在那里添加了代码,如果您想查看,可以在表单上绘制框,但这些只是区域的表示,而不是
矩形
值本身。

不使用控件。只需使用一个矩形列表,看看用户是否在其中一个矩形内单击。要将更多数据与矩形关联,请创建一个类。正如建议的那样,将透明控件用作不可见触发器的最佳方法是不要这样做。您所要做的就是处理表单或任何其他控件的
MouseClick
事件,以便在单击时以及在何处通知它。然后,您只需测试单击的位置是否对应于应该表示“触发器”的区域。如果每个区域都由一个
矩形表示
,则只需对每个区域调用
Contains
。一个选项是创建一个
字典(矩形,动作)
,并执行与包含单击位置的
矩形相关的
动作
。@jmchilney有一种简单的方法来绘制矩形形状吗?我必须安装“powerpacks”才能获得自动形状?运行时创建的这些形状可以在控制数组中建立索引,或者只是PictureBox?上的图形?。。。我记得在vb6代码中,我只使用从txt文件4坐标中写入/读取来绘制透明矩形或控件,并使用.tag属性将名称保存到标签中。但是vb.net看起来更复杂,需要努力工作!没有什么可画的。我说的不是
矩形
。我说的是一个
矩形
。这不是一个控制;它没有用户界面。它只是一个矩形的表示,就像
是一个点的表示一样。