2012-01-20 131 views
0

我在一个WPF应用程序的类中创建了两个相同的圆,我想为它们分配相同的事件。但是,只有其中一个事件管理者在另一个管理员而不是其他人员工作。我试图用两个不同的名称实现相同的事件处理程序,但仍然发生同样的情况。以下代码可能存在什么潜在问题?事件处理程序部分工作

SmallCircle leftCircle1 = new InputCircle(Brushes.Yellow, 7, 7); 
Ellipse s1Ellipse = leftCircle1.thisEllipse; 
rectCanvas.Children.Add(s1Ellipse); 
SmallCircle leftCircle2 = new InputCircle(Brushes.Yellow, 7, 7); 
Ellipse s2Ellipse = leftCircle2.thisEllipse; 
rectCanvas.Children.Add(s2Ellipse); 

s1Ellipse.MouseLeftButtonDown += new MouseButtonEventHandler(input_MouseLeftButtonDown1); 
s2Ellipse.MouseLeftButtonDown += new MouseButtonEventHandler(input_MouseLeftButtonDown1); 
s3Ellipse.MouseLeftButtonDown += new MouseButtonEventHandler(output_MouseLeftButtonDown1);  


private void output_MouseLeftButtonDown1(object sender, MouseButtonEventArgs e) 
    { 
     rectCanvas.MouseLeftButtonDown -= Canvas_MouseLeftButtonDown; 
     rectCanvas.MouseLeftButtonUp -= Canvas_MouseLeftButtonUp; 
     rectCanvas.MouseMove -= Canvas_MouseMove; 


     nodeComb.lineCreated = true; 
     Point StartPosition = e.GetPosition(sender as UIElement); 
     nodeComb.initialPoint = StartPosition; 

    } 

    private void input_MouseLeftButtonDown1(object sender, MouseButtonEventArgs e) 
    { 
     if (nodeComb.lineCreated == true) 
     { 
      Point EndPosition = e.GetPosition(sender as UIElement); 
      nodeComb.endingPoint = EndPosition; 
      nodeComb.createLine(); 
      nodeComb.lineCreated = false; 
     } 

    }  

特别是,s2Ellipse事件处理程序有效,而s1Ellipse不能。

The Gui

只有底部输入圆(S2)监听处理程序中,上述没有。 真的很奇怪!

+0

你为什么期望这个事件也会被s1发射? – 2012-01-20 16:11:22

+0

我希望两个形状都能“倾听”同一个事件,以绘制一条结束于其中任何一个的行?即使当我改变他们的顺序时,只有s2发射。 – arjacsoh

+0

可以显示生成的GUI的图像吗? –

回答

0

好吧,我最终失去了问题。我在包含每个矩形名称的矩形的下半部分添加一个文本框。这有足够的宽度来覆盖小的输入圆圈,因此鼠标事件处理程序不适用于上面的圆圈。我只是修剪了它的宽度,处理程序适用于两个圆圈。真的是骗人的...