专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > Silverlight

MouseMove事件与MouseLeftButtonUP事件的有关问题

发布时间:2011-06-27 19:23:39 文章来源:www.iduyao.cn 采编人员:星星草
MouseMove事件与MouseLeftButtonUP事件的问题
Canvas的MouseMove事件执行时为什么无法准确捕捉到MouseLeftButtonUP和MouseLeftButtonDown事件,每次鼠标弹起时偶尔能捕捉到UP事件,大多数情况下还处于Move事件中,无法获得最后的点啊,大神么帮点忙吧!
------解决思路----------------------
还没解决?? 上点代码例子,,,好测试看看
------解决思路----------------------
怎么可能呢,建议Up事件中移除Move事件钩子,对于这种又要移动又要触发鼠标按键的情况,我通常是使用MouseEnter来添加MouseMove、MouseDown等事件钩子,在MouseLeave中移除这些钩子,然后MouseDown事件再添加MouseUp事件钩子,MouseUp事件再移除这些钩子,看似费事其实可以避免逻辑冲突。
------解决思路----------------------
引用:
Quote: 引用:

怎么可能呢,建议Up事件中移除Move事件钩子,对于这种又要移动又要触发鼠标按键的情况,我通常是使用MouseEnter来添加MouseMove、MouseDown等事件钩子,在MouseLeave中移除这些钩子,然后MouseDown事件再添加MouseUp事件钩子,MouseUp事件再移除这些钩子,看似费事其实可以避免逻辑冲突。
这个说的我看的不大懂啊,能说详细一点么?


用你这个代码改写就是这样的

namespace WpfApplication1
{
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
        Point pcanvas;
        Boolean flag;
        public MainWindow()
        {
            InitializeComponent();
        }
        private void canvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            pcanvas = e.GetPosition(canvas);
        }
 
        private void canvas_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
             this.canvas.canvas_MouseMove -= this.canvas_MouseMove;
        }
 
        private void canvas_MouseMove(object sender, MouseEventArgs e)
        {
            Point pBig = new Point();
                pBig = e.GetPosition(canvas);
                Rectangle curve3 = canvas.FindName("newrectangle") as Rectangle;
                if (curve3 != null)
                {
                    canvas.Children.Remove(curve3);
                    canvas.UnregisterName("newrectangle");
                }
                Rectangle rectangle = new Rectangle();//矩形对象
                //属性设置,填充颜色、边粗细、边颜色、宽、高等
                rectangle.StrokeThickness = 1;
                rectangle.Stroke = System.Windows.Media.Brushes.Green; //边,粉色
                rectangle.Width = Math.Abs(pBig.X - pcanvas.X);
                rectangle.Height = Math.Abs(pBig.Y - pcanvas.Y);
                //矩形对象相对于父容器对象Canvas的位置,左边距、上边距
                Canvas.SetLeft(rectangle, pcanvas.X);
                Canvas.SetTop(rectangle, pcanvas.Y);
                canvas.Children.Add(rectangle);
                canvas.RegisterName("newrectangle", rectangle);
        }
 
        private void button1_Click(object sender, RoutedEventArgs e)
        {
            this.canvas.canvas_MouseMove += this.canvas_MouseMove;
        }
    }
}
------解决思路----------------------
上面粘贴写的有点错了,不是 this.canvas.canvas_MouseMove +=而是 this.canvas.MouseMove += , -=也是,你鼠标左键释放事件中将MouseMove事件通过-=移除不可能还在能触发的啦
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: