2012-01-05 150 views
2

如何检查一个对象(在这种情况下,我的对象是一个ButtonBox)是否存在于一个GroupBox中,但在一个确切的位置。如何检查一个GroupBox中是否存在对象 - VB.NET

事情是这样的:

If Groupbox1.NameOfButtonBox.location(40,190) exists then 
     Do my code 
end if 

我知道的语法是完全错误的,但它只是一个例子

+2

*不要*测试控制的位置属性。当窗体在具有不同视频DPI设置的机器上自动缩放时,控件将四处移动。为什么你想要做到这一点,否则无法猜测。 – 2012-01-05 22:05:12

+0

那么让我解释一下。我有一个Groupbox内有4个按钮的表单,每个按钮都有自己的背景图像。我想要做的是检查是否有任何按钮存在于该确切位置(每个按钮都有其自己的确切位置),如果没有,则会在该位置放置一个新按钮,直到Groupbox有4个按钮(因此它将有4个位置)然后一个新的Groupbox将被创建,如果“旧”已经有4个按钮等等。用户将为每个新按钮提供名称。 – 2012-01-05 23:44:28

+0

好吧,只要跟踪你做了什么,所以你不必找到困难的方式。当你创建一个按钮时,也将它添加到你存储在类的字段中的List(Of Button)。如果您需要多个组框,则列表(Of List(Of Button))。 – 2012-01-06 00:19:48

回答

1

为了使用这个按钮类型而不是特定的按钮的实例,您将需要检查找到的控件的类型。你还需要确保那里有一个控制。这是一个函数,它将检查一个groupbox是否在给定的坐标中包含一个按钮。

Private Function ButtonExists(ByVal group As GroupBox, ByVal x As Integer, ByVal y As Integer) As Boolean 

    'No sense checking if there isn't a group box 
    If group Is Nothing Then 
     Return False 
    End If 

    'Find the control at the given point 
    Dim ctrl As Control = group.GetChildAtPoint(New Point(x, y)) 

    'If there is a control at that point check to see if it's a button 
    If ctrl IsNot Nothing AndAlso TypeOf (ctrl) Is Button Then 
     Return True 
    End If 

    Return False 
End Function 
+0

感谢@Briddums代码正在工作。 现在我必须为每个Button动态设置BackgroundImage。 我有4个按钮,每个按钮都被命名为“Button1”,“Button2”等。 所以基本上我有这样的事情: 'n = 1时至4 DO 按钮和n.BackgroundImage = Image.FromFile(XXXXXXX) next' 再次声明,我有问题的按钮类型,而不是因为具有一个静态的按钮实例,我想要一个动态的实例。 你能帮我这个吗? 谢谢 – 2012-01-06 23:07:10

+0

@EricFernandez最简单的方法是遍历groupbox中的按钮控件。对于Groupbox1.Controls中的每个控件作为控件如果Typeof(ctrl)是Button然后ctype(ctrl,Button).BackgroundImage = Image.FromFile(xxx) – briddums 2012-01-09 14:35:20

+0

谢谢@briddums。它工作正常:D – 2012-01-09 18:45:03

0

退房GetChildAtPoint:

Dim ctrl As Control = GroupBox1.GetChildAtPoint(New Point(147, 96)) 
If TypeOf ctrl Is Button Then 
    Dim btn As Button = DirectCast(ctrl, Button) 
    'Do your code 
End If 

MSDN: Control.GetChildAtPoint Method

+0

感谢迈克的代码,如果工作,部分... 那么问题是,我想检查是否有任何ButtonBox在该位置,所以我不会在IF语句中写入特定的buttonbox名称。例如: Dim ctrl As Control = Me.GetChildAtPoint(New Point(147, 96)) If ANYButtonBox.Equals(ctrl) Then 'Do your code End If 2012-01-05 23:08:07

+0

更新了示例代码,以更准确地反映您正在尝试执行的操作。 – 2012-01-06 13:20:25

相关问题