Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.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
Wpf 即使在重新添加处理程序后,项目更新后也不会触发事件_Wpf_Vb.net_Mouseevent - Fatal编程技术网

Wpf 即使在重新添加处理程序后,项目更新后也不会触发事件

Wpf 即使在重新添加处理程序后,项目更新后也不会触发事件,wpf,vb.net,mouseevent,Wpf,Vb.net,Mouseevent,在我的程序Cyrus Beck算法中,我必须剪裁点。剪裁窗口内的点必须为红色。外面还是黑的 我将程序中的点表示为矩形,并给出删除该点的事件处理程序。当我想删除点时,窗口外的点起作用,但多边形内的点不起作用,事件右键单击事件不调用 这是我的重点课程 忽略组件类,因为它只是主窗口中画布的处理程序 要能够删除,我需要删除,它表示状态,如果删除为真并且当前状态=MouseState.Pointer。代码将向所有点(矩形)添加处理程序 在我将点修改为红色之前,我必须有一个循环来检查位置是否相同,如果位置相

在我的程序Cyrus Beck算法中,我必须剪裁点。剪裁窗口内的点必须为红色。外面还是黑的

我将程序中的点表示为
矩形
,并给出删除该点的事件处理程序。当我想删除点时,窗口外的点起作用,但多边形内的点不起作用,事件右键单击事件不调用

这是我的重点课程

忽略
组件
类,因为它只是主窗口中画布的处理程序

要能够删除,我需要
删除
,它表示状态,如果
删除
并且
当前状态=MouseState.Pointer
。代码将向所有
(矩形)添加处理程序

在我将点修改为红色之前,我必须有一个循环来检查位置是否相同,如果位置相同,那么编辑点

    Dim z As CyrusBeck = New CyrusBeck(clippingWindow)
                z.Clip(points.items)
'CyrusBeck has a properties 'points'
'CyrusBeck.points saves the all the point that inside the clipping window
                For i As Integer = 0 To points.rects.Count - 1
                    For Each p As Point In z.points
                        If CGAProject.Points.samePoint(p, points.rects.Item(i)) Then
                            Dim temp_r As Rectangle = New Rectangle()
                            temp_r = points.rects.Item(i)

                            temp_r.Stroke = Brushes.Red
                            temp_r.Fill = Brushes.Red
                            points.rects.Add(temp_r)
                            points.rects.RemoveAt(i)
                        End If
                    Next
                Next
当程序达到此状态时,
currentState
将永远不会是
MouseState.Pointer
。因此,如果用户想要删除一个点,用户必须按下按钮
chge\u pointer
,以便调用my
chge\u pointer\u Click
,并重新设置所有我的处理程序

为什么
Rectangle.MouseRightButtonDown
Rectangle
更新后不被调用? 没有更新的矩形调用
Rectangle.MouseRightButtonDown
事件,因此我重新设置了处理程序

怎么了

有没有其他方法可以让用户删除窗口内外的矩形

注意:

  • 在我将我的
    矩形
    分配回列表后,我重新设置了处理程序,但它仍然不起作用
  • 我还创建了
    AddHandler temp\u r.MouseRightButtonDown,点的地址。点右键单击
    ,就在我将我的
    矩形
    分配回列表之后,但它也不起作用

在活动结束时单击,如:

Sub point_rightClick(sender As Object, e As MouseButtonEventArgs)
我认为你应该有一个“手柄”

例如

Sub point_rightClick(sender As Object, e As MouseButtonEventArgs) Handles point.MouseClick
如果没有这一点,sub将永远不会被调用(似乎正在发生)

此方法也没有“句柄”

它可能是:

Public Overrides Sub Canvas1_MouseDown(sender As Object, e As MouseButtonEventArgs) Handles Canvas1.MouseDown

我应该打什么?是不是
处理point.MouseRightButton
?这给了我错误,未定义的
。我认为这不是问题所在,因为此方法适用于未更新的项。@没有“句柄”的Jodivanz单击表单元素时不会调用这些方法。理想情况下,您应该处理FORMELEMENT.MouseClick,然后可以检查它是右键单击还是左键单击。您希望单击什么来触发鼠标点击点?@Jodivanz-如果您使用的是
AddHandler
,则不需要
Handles
。如果确实使用
句柄
,请确保变量声明为
with events
。事件不是来自元素,而是来自列表中的所有元素。请参阅我的
chooseHandler()
方法。
Sub point_rightClick(sender As Object, e As MouseButtonEventArgs) Handles point.MouseClick
Public Overrides Sub Canvas1_MouseDown(sender As Object, e As MouseButtonEventArgs)
Public Overrides Sub Canvas1_MouseDown(sender As Object, e As MouseButtonEventArgs) Handles Canvas1.MouseDown