本文是武林小編將為大家介紹關(guān)于如何用C# 實(shí)現(xiàn)鼠標(biāo)框選效果多內(nèi)容,希望本篇文章能幫助到大家,看完后希望大家點(diǎn)個(gè)贊哦。
實(shí)現(xiàn)步驟:
1.實(shí)現(xiàn)整個(gè)鼠標(biāo)框選的幾個(gè)事件(down、move、up),當(dāng)鼠標(biāo)點(diǎn)下記錄鼠標(biāo)框選的起點(diǎn),鼠標(biāo)抬起結(jié)束操作。
2.以鼠標(biāo)框選過程中獲取的鼠標(biāo)坐標(biāo)為基點(diǎn)計(jì)算框選的矩形的4點(diǎn)坐標(biāo),4點(diǎn)坐標(biāo)以順時(shí)針方向布點(diǎn)。
3.通過Shape.Path類實(shí)現(xiàn)在類上畫出此矩形。
代碼如下:
?
? private void InitializeComponent() {
?? this.Loaded += OnLoad;
?? this.MouseDown += OnMouseDown;
?? this.MouseMove += OnMouseMove;
?? this.MouseUp += OnMouseUp;
?? locus = new Path();
?? locus.Fill = new SolidColorBrush(Color.FromArgb(1, 255, 255, 255));
?? locus.Stroke = Brushes.Red;
?? locus.StrokeThickness = 1;
?? locus.IsManipulationEnabled = true;
? }
? void OnMouseUp(object sender, System.Windows.Input.MouseButtonEventArgs e) {
?? ispath = false;
? }
? void OnMouseMove(object sender, System.Windows.Input.MouseEventArgs e) {
?? if(ispath){
??? endpoint = e.GetPosition(this);
??? locus.Data = DrawingRect(startpoint,endpoint);
?? }
? }
? void OnMouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e) {
?? if(!this.Children.Contains(locus)) this.Children.Add(locus);
?? if (locus.Data != null) locus.Data = null;
?? startpoint = e.GetPosition(this);
?? ispath = true;
? }
? void OnLoad(object sender, System.Windows.RoutedEventArgs e) {
?? this.Background = new SolidColorBrush(Color.FromArgb(35, 255, 255, 255));
? }
? private PathGeometry DrawingRect(Point beginpoint, Point closepoint) {
?? PathGeometry result = new PathGeometry();?
?? PathFigure figure = new PathFigure();
?? figure.IsClosed = true;
?? figure.StartPoint = beginpoint;
?? PathSegmentCollection pathSegmentCollection = new PathSegmentCollection();
?? PathFigureCollection pathFigureCollection = new PathFigureCollection();??
?? LineSegment m1 = new LineSegment();
?? m1.Point = new Point(closepoint.X, beginpoint.Y);
?? LineSegment m2 = new LineSegment();
?? m2.Point = closepoint;
?? LineSegment m3 = new LineSegment();
?? m3.Point = new Point(beginpoint.X, closepoint.Y);
?? pathSegmentCollection.Add(m1);
?? pathSegmentCollection.Add(m2);
?? pathSegmentCollection.Add(m3);
?? figure.Segments = pathSegmentCollection;
?? pathFigureCollection.Add(figure);
?? result.Figures = pathFigureCollection;
?? return result();
? }
? private Path locus;
? private bool ispath = false;
? private Point startpoint;
? private Point endpoint;
?}
}
本文詳細(xì)介紹了如何用C# 實(shí)現(xiàn)鼠標(biāo)框選效果多內(nèi)容,我們只需要根據(jù)以上步驟即可用C# 實(shí)現(xiàn)鼠標(biāo)框選效果。
新聞熱點(diǎn)
疑難解答
圖片精選