原创企业级控件库之图片浏览控件

简介:

  在上两篇:我介绍了原创企业级控件库之组合查询控件 原创企业级控件库之大数据量分页控件,受到了很多朋友的支持,给了我很大的动力,在此我特表感谢。有的朋友要求把源码提供上来,我在第一篇就讲了,源码会在我这个系列讲完之后提供,大家先别着急,如果你确实需要,可以时常关注此系列,谢谢大家。其实,在系列文章中,我已把核心代码贡献出来了。学习有时是参考别人与实践别人的劳动成果的过程,你光把别人的代码拿过来用用,不研究其实质,进步很慢。

这篇我将给大家介绍:企业级控件库之图片浏览控件。

  摘要

  我想大家用过或听说过ACDSee 对于图片浏览的强大功能,我接下来介绍的控件与ACDSee相比,可谓是天壤之别,虽没有其强大的功能,但用在一些常用的软件上,提供一些常用的基本功能还是可以的。同时,我只提供一个模子,代码开源,你可以随便修改以满足自己的需要。

  成就别人、等于成就自己。我没什么要求,欢迎大家多多支持与评论,觉得不错的,记得点击文章左下角的”关注博客”,就这么简单。同时,你要用什么好的想法,也可以与我交流,谢谢。

  图片浏览控件运行效果如下图:

  

  本控件类图:

  本控件类详细信息:

  本控件核心代码: 

滚动鼠标滚轮实现鼠标缩放
 
  
1 #region 滚动鼠标滚轮实现鼠标缩放
2 /* ***********************************************************
3 * 滚动鼠标滚轮实现鼠标缩放
4 *********************************************************** */
5 private void picView_MouseWheel( object sender, MouseEventArgs e)
6 {
7 switch (keyAction)
8 {
9 case 1 :
10 if (e.Delta > 0 && picView.Width < 10000 )
11 {
12 zoom(e.Location, 1100 );
13 }
14 else if (e.Delta < 0 && picView.Image.Width / picView.Width < 5 )
15 {
16 zoom(e.Location, 900 );
17 }
18 CenterImage(); // 使图片居中显示
19   break ;
20 case 2 :
21 if (hScrollBarImageView.Visible)
22 hScrollBarImageView.Value = (hScrollBarImageView.Value - e.Delta < 0 ? 0 : (hScrollBarImageView.Value - e.Delta > hScrollBarImageView.Maximum ? hScrollBarImageView.Maximum : hScrollBarImageView.Value - e.Delta));
23 break ;
24 default :
25 if (vScrollBarImageView.Visible)
26 vScrollBarImageView.Value = (vScrollBarImageView.Value - e.Delta < 0 ? 0 : (vScrollBarImageView.Value - e.Delta > vScrollBarImageView.Maximum ? vScrollBarImageView.Maximum : vScrollBarImageView.Value - e.Delta));
27 break ;
28 }
29 }
30 #endregion

  下面给出整个控件的完整代码及窗体调用方法:

  一、控件完整代码:

  

图像显示控件
 
  
1 #region 版权信息
2 /* ---------------------------------------------------------------------*
3 // Copyright (C) 2010 http://www.cnblogs.com/huyong
4 // 版权所有。
5 // 项目 名称:《Winform通用控件库》
6 // 文 件 名: UcImageView.cs
7 // 类 全 名: DotNet.Controls.UcImageView
8 // 描 述: 图像显示控件
9 // 创建 时间: 2010-08-05
10 // 创建人信息: [**** 姓名:胡勇 QQ:80368704 E-Mail:80368704@qq.com *****]
11 *---------------------------------------------------------------------- */
12 #endregion
13
14 using System;
15 using System.ComponentModel;
16 using System.Drawing;
17 using System.Windows.Forms;
18 using System.Drawing.Printing;
19 using DotNet.Common;
20
21 namespace DotNet.Controls
22 {
23 /// <summary>
24 /// 图像显示控件
25 /// UcImageView
26 ///
27 /// 修改纪录
28 /// 2010-11-6 胡勇 优化相关代码。
29 /// 2010-8-5 胡勇 创建图像显示控件
30 ///
31 /// <author>
32 /// <name> 胡勇 </name>
33 /// <QQ> 80368704 </QQ>
34 /// <Email> 80368704@qq.com </Email>
35 /// </author>
36 /// </summary>
37 public partial class UcImageView : UserControl
38 {
39 #region 构造函数
40 public UcImageView()
41 {
42 InitializeComponent();
43 // 记录PnlMain的size
44 panelOldSize.X = PnlMain.Width;
45 panelOldSize.Y = PnlMain.Height;
46 }
47 #endregion
48
49 #region 公共变量
50 private Point StartP = new Point( 0 , 0 );
51 private bool isMouseDown = false ;
52 private Point panelOldSize = new Point( 0 , 0 );
53 private int imgIndexBy1000 = 0 ;
54 private int keyAction = 0 ;
55 private int w, h;
56 #endregion
57
58 #region 公共事件
59
60 [Category( " 图片浏览 " ), Description( " 移动或漫游图片的Checked事件Changed时发生。 " ), Browsable( true )]
61 public event EventHandler OnMnuMoveImageCheckedChanged;
62
63 #endregion
64
65 #region 公共方法
66
67 #region 增加图片到PictureBox:void AddImage(string fileName, bool isAsync)
68 /// <summary>
69 /// 增加要显示的图片
70 /// </summary>
71 /// <param name="fileName"> 图片路径全名 </param>
72 /// <param name="isAsync"> true:异步方式加载图片 </param>
73 public void AddImage( string fileName, bool isAsync)
74 {
75 if (isAsync) // 异步加载图片
76 {
77 // 图片异步加载完成后的处理事件
78 picView.LoadCompleted += new AsyncCompletedEventHandler(picView_LoadCompleted);
79 // 图片加裁时,显示等待光标
80 picView.UseWaitCursor = true ;
81 // 采用异步加裁方式
82 picView.WaitOnLoad = false ;
83 // 开始异步加裁图片
84 picView.LoadAsync(fileName);
85 }
86 else
87 {
88 picView.Image = Image.FromFile(fileName); // 载入图片
89 }
90
91 InitialImage();
92
93 }
94
95 /// <summary>
96 /// 增加要显示的图片
97 /// </summary>
98 /// <param name="img"> Image </param>
99 public void AddImage(Image img)
100 {
101 if (img != null )
102 {
103 picView.Image = img;
104 InitialImage();
105 }
106 else
107 {
108 picView = null ;
109 }
110 }
111 #endregion
112
113 #region 得到ImageView中的图片:Image GetImageInImageView()
114 /// <summary>
115 /// 得到ImageView中的图片
116 /// </summary>
117 /// <returns> Image </returns>
118 public Image GetImageInImageView()
119 {
120 if (picView.Image != null )
121 {
122 return picView.Image;
123 }
124 else
125 {
126 return null ;
127 }
128 }
129 #endregion
130
131 #region 放大、缩小、适应图片大小、移动图片、左旋转图片与右旋转图片
132 /// <summary>
133 /// 放大图片
134 /// </summary>
135 public void ZoomInImage()
136 {
137 if (picView.Image != null )
138 {
139 if (picView.Width < 5000 )
140 {
141 zoom(picView.Location, 1100 );
142 CenterImage();
143 }
144 else
145 {
146 MessageBox.Show( " 对不起,不能再进行放大! " , " 提示信息 " ,MessageBoxButtons.OK,MessageBoxIcon.Information);
147 }
148 }
149 }
150
151 /// <summary>
152 /// 缩小图片
153 /// </summary>
154 public void ZoomOutImage()
155 {
156 if (picView.Image != null )
157 {
158 if (picView.Image.Width / picView.Width < 5 && - 7 < 0 )
159 {
160 zoom(picView.Location, 900 );
161 CenterImage();
162 }
163 else
164 {
165 MessageBox.Show( " 对不起,不能再进行缩小! " , " 提示信息 " , MessageBoxButtons.OK, MessageBoxIcon.Information);
166 }
167 }
168 }
169
170 /// <summary>
171 /// 适应图片大小
172 /// </summary>
173 public void FitImageSize()
174 {
175 if (picView.Image != null )
176 {
177 float r1 = ( float ) this .w / this .picView.Width;
178 float r2 = ( float ) this .h / this .picView.Height;
179 this .picView.Scale(r1, r2);
180 this .picView.Left = ( this .PnlMain.Width - this .picView.Width) / 2 ;
181 this .picView.Top = ( this .PnlMain.Height - this .picView.Height) / 2 ;
182 this .picView.Cursor = Cursors.Default;
183 CenterImage();
184 }
185 }
186
187 /// <summary>
188 /// 移动图片
189 /// </summary>
190 public void MoveImage()
191 {
192 mnuMy.Checked = MnuMoveImageChecked;
193 }
194
195 /// <summary>
196 /// 左旋转图片
197 /// </summary>
198 public void LeftRotateImage()
199 {
200 if (picView.Image != null )
201 {
202 picView.Image.RotateFlip(RotateFlipType.Rotate90FlipX);
203 picView.Refresh();
204 CenterImage();
205 }
206 }
207
208 /// <summary>
209 /// 右旋转图片
210 /// </summary>
211 public void RightRotateImage()
212 {
213 if (picView.Image != null )
214 {
215 picView.Image.RotateFlip(RotateFlipType.Rotate90FlipY);
216 picView.Refresh();
217 CenterImage();
218 }
219 }
220 #endregion
221
222 #endregion
223
224 #region 公共属性
225 private bool _mnuMoveImageChecked;
226 /// <summary>
227 /// 确定漫游菜单项是否处于选中状态(用于是否可以移动或漫游图片)
228 /// </summary>
229 [Category( " 图片浏览 " ), Description( " 确定漫游菜单项是否处于选中状态(用于是否可以移动或漫游图片) " ),Browsable( false )]
230 public bool MnuMoveImageChecked
231 {
232 get
233 {
234 return _mnuMoveImageChecked;
235 }
236 set
237 {
238 _mnuMoveImageChecked = value;
239 this .mnuMy.Checked = _mnuMoveImageChecked;
240 }
241 }
242
243 private bool _mnuPrintVisible = true ; // 默认可见
244 /// <summary>
245 /// 确定打印菜单项是可见还是隐藏
246 /// </summary>
247 [Category( " 图片浏览 " ), Description( " 确定打印菜单项是可见还是隐藏 " ), Browsable( true )]
248 public bool MnuPrintVisible
249 {
250 get
251 {
252 return _mnuPrintVisible;
253 }
254 set
255 {
256 _mnuPrintVisible = value;
257 this .mnuPrint.Visible = _mnuPrintVisible;
258 }
259 }
260 #endregion
261
262 #region 私有方法
263
264 private void picView_LoadCompleted( object sender, AsyncCompletedEventArgs e)
265 {
266 // 图片加载完成后,将光标恢复
267 picView.UseWaitCursor = false ;
268 }
269
270 #region 图片缩放
271 /// <summary>
272 /// 图片缩放
273 /// </summary>
274 /// <param name="center"> 缩放中心点 </param>
275 /// <param name="zoomIndexBy1000"> 缩放倍率的1000倍 </param>
276 private void zoom(Point center, int zoomIndexBy1000)
277 {
278 // 记录原始的picView的Size
279 Point oldSize = new Point(picView.Width, picView.Height);
280 // 实施放大(以x方向为基准计算得出y方向大小,防止多次运算误差积累使Image和picView的尺寸不匹配)
281 picView.Width = picView.Width * zoomIndexBy1000 / 1000 ;
282 picView.Height = picView.Width * imgIndexBy1000 / 1000 ;
283 // 重新定位标定后的picView位置
284 picView.Left -= ((picView.Width - oldSize.X) * (center.X * 1000 / oldSize.X)) / 1000 ;
285 picView.Top -= ((picView.Height - oldSize.Y) * (center.Y * 1000 / oldSize.Y)) / 1000 ;
286 // 重新设定横向滚动条最大值和位置
287 if (picView.Width - PnlMain.Width > 0 )
288 {
289 hScrollBarImageView.Visible = true ;
290 hScrollBarImageView.Maximum = picView.Width - PnlMain.Width + vScrollBarImageView.Width + 2 ;
291 hScrollBarImageView.Value = (picView.Left >= 0 ? 0 : ( - picView.Left > hScrollBarImageView.Maximum ? hScrollBarImageView.Maximum : - picView.Left));
292 }
293 else
294 {
295 hScrollBarImageView.Visible = false ;
296 }
297 // 重新设定纵向滚动条最大值和位置
298 if (picView.Height - PnlMain.Height > 0 )
299 {
300 vScrollBarImageView.Visible = true ;
301 vScrollBarImageView.Maximum = picView.Height - PnlMain.Height + hScrollBarImageView.Width + 2 ;
302 vScrollBarImageView.Value = (picView.Top >= 0 ? 0 : ( - picView.Top > vScrollBarImageView.Maximum ? vScrollBarImageView.Maximum : - picView.Top));
303 }
304 else
305 {
306 vScrollBarImageView.Visible = false ;
307 }
308 }
309 #endregion
310
311 #region 图片加裁到PictureBox中后,对其进行初始化操作
312 /// <summary>
313 /// 图片加裁到PictureBox中后,对其进行初始化操作
314 /// </summary>
315 private void InitialImage()
316 {
317 ImageChange(); // 得到最适合显示的图片尺寸
318 this .w = this .picView.Width;
319 this .h = this .picView.Height;
320
321 // 设定图片位置
322 picView.Location = new Point( 0 , 0 );
323 // 设定图片初始尺寸
324 picView.Size = picView.Image.Size;
325 // 设定图片纵横比
326 imgIndexBy1000 = (picView.Image.Height * 1000 ) / picView.Image.Width;
327 // 设定滚动条
328 if (picView.Width - PnlMain.Width > 0 )
329 {
330 hScrollBarImageView.Maximum = picView.Width - PnlMain.Width + vScrollBarImageView.Width + 2 ; // + hScrollBarImageView.LargeChange
331 hScrollBarImageView.Visible = true ;
332 }
333 if (picView.Height - PnlMain.Height > 0 )
334 {
335 vScrollBarImageView.Maximum = picView.Height - PnlMain.Height + hScrollBarImageView.Height + 2 ; // + vScrollBarImageView.LargeChange
336 vScrollBarImageView.Visible = true ;
337 }
338 CenterImage();
339 }
340 #endregion
341
342 #region 居中与全屏显示图片
343
344 /// <summary>
345 /// 使图片全屏显示
346 /// </summary>
347 private void FullImage()
348 {
349 if (picView.Image.Width < picView.Width && picView.Image.Height < picView.Height)
350 {
351 picView.SizeMode = PictureBoxSizeMode.CenterImage;
352 }
353 CalculateAspectRatioAndSetDimensions();
354 }
355
356
357 /// <summary>
358 /// 保持图片居中显示
359 /// </summary>
360 private void CenterImage()
361 {
362 picView.Left = PnlMain.Width / 2 - picView.Width / 2 ;
363 picView.Top = PnlMain.Height / 2 - picView.Height / 2 ;
364 }
365
366 #endregion
367
368 #region CalculateAspectRatioAndSetDimensions
369 /// <summary>
370 /// CalculateAspectRatioAndSetDimensions
371 /// </summary>
372 /// <returns> double </returns>
373 private double CalculateAspectRatioAndSetDimensions()
374 {
375 double ratio;
376 if (picView.Image.Width > picView.Image.Height)
377 {
378 ratio = picView.Image.Width / picView.Image.Height;
379 picView.Height = Convert.ToInt16( double .Parse(picView.Width.ToString()) / ratio);
380 }
381 else
382 {
383 ratio = picView.Image.Height / picView.Image.Width;
384 picView.Width = Convert.ToInt16( double .Parse(picView.Height.ToString()) / ratio);
385 }
386 return ratio;
387 }
388 #endregion
389
390 #region 用于适应图片大小
391 /// <summary>
392 /// 用于适应图片大小
393 /// </summary>
394 private void ImageChange()
395 {
396 this .picView.Height = this .picView.Image.Height;
397 this .picView.Width = this .picView.Image.Width;
398 float cx = 1 ;
399 if ( this .picView.Image.Height > this .PnlMain.Height) cx =
400 ( float )( this .PnlMain.Height - 10 ) / ( float ) this .picView.Image.Height;
401
402 this .picView.Scale(cx);
403 this .picView.Left = ( this .PnlMain.Width - this .picView.Width) / 2 ;
404 this .picView.Top = ( this .PnlMain.Height - this .picView.Height) / 2 ;
405 }
406 #endregion
407
408 #endregion
409
410 #region 窗口(PnlMain)尺寸改变时图像的显示位置控制
411 /* ***********************************************************
412 * 窗口(PnlMain)尺寸改变时图像的显示位置控制
413 *********************************************************** */
414 private void PnlMain_Resize( object sender, EventArgs e)
415 {
416 // 对左右的方向操作(左右)
417 if (picView.Width <= PnlMain.Width) // 图片左右居中
418 {
419 picView.Left = (PnlMain.Width - picView.Width) / 2 ;
420 hScrollBarImageView.Visible = false ;
421 }
422 else if (picView.Left < 0 && picView.Width + picView.Left < PnlMain.Width) // 图片靠右
423 {
424 picView.Left = PnlMain.Width - picView.Width;
425 hScrollBarImageView.Visible = true ;
426 }
427 else if (picView.Left > 0 && picView.Width + picView.Left > PnlMain.Width) // 图片靠左
428 {
429 picView.Left = 0 ;
430 hScrollBarImageView.Visible = true ;
431 }
432 else // 保证显示的中心图样不变(左右)
433 {
434 picView.Left += (PnlMain.Width - panelOldSize.X) / 2 ;
435 hScrollBarImageView.Visible = true ;
436 }
437 // 设定横向滚动条最大值
438 hScrollBarImageView.Maximum = (picView.Width - PnlMain.Width > 0 ? picView.Width - PnlMain.Width + hScrollBarImageView.Maximum + 2 : 0 );
439 // 设定横向滚动条Value
440 hScrollBarImageView.Value = (picView.Left >= 0 ? 0 : - picView.Left);
441 // 重置旧的pannel1的Width
442 panelOldSize.X = PnlMain.Width;
443
444 // 对上下的方向操作(上下)
445 if (picView.Height <= PnlMain.Height) // 图片上下居中
446 {
447 picView.Top = (PnlMain.Height - picView.Height) / 2 ;
448 vScrollBarImageView.Visible = false ;
449 }
450 else if (picView.Top < 0 && picView.Height + picView.Top < PnlMain.Height) // 图片靠下
451 {
452 picView.Top = PnlMain.Height - picView.Height;
453 vScrollBarImageView.Visible = true ;
454 }
455 else if (picView.Top > 0 && picView.Height + picView.Top > PnlMain.Height) // 图片靠上
456 {
457 picView.Top = 0 ;
458 vScrollBarImageView.Visible = true ;
459 }
460 else // 保证显示的中心图样不变(上下)
461 {
462 picView.Top += (PnlMain.Height - panelOldSize.Y) / 2 ;
463 vScrollBarImageView.Visible = true ;
464 }
465 // 设定纵向滚动条最大值
466 vScrollBarImageView.Maximum = (picView.Height - PnlMain.Height > 0 ? picView.Height - PnlMain.Height + vScrollBarImageView.Maximum + 2 : 0 );
467 // 设定纵向滚动条Value
468 vScrollBarImageView.Value = (picView.Top >= 0 ? 0 : - picView.Top);
469 // 重置旧的pannel1的Height
470 panelOldSize.Y = PnlMain.Height;
471 }
472 #endregion
473
474 #region 滚动条滚动时,图片移动
475 /* ***********************************************************
476 * 滚动条滚动时,图片移动
477 *********************************************************** */
478 private void vScrollBarImageView_ValueChanged( object sender, EventArgs e)
479 {
480 picView.Top = - vScrollBarImageView.Value;
481 }
482
483 private void hScrollBarImageView_ValueChanged( object sender, EventArgs e)
484 {
485 picView.Left = - hScrollBarImageView.Value;
486 }
487 #endregion
488
489 #region PictureBox 鼠标按下、鼠标进入、松开与移动事件
490 private void picView_MouseDown( object sender, MouseEventArgs e)
491 {
492 StartP = e.Location;
493 isMouseDown = true ;
494 }
495
496 private void picView_MouseEnter( object sender, EventArgs e)
497 {
498 picView.Focus();
499 }
500
501 private void picView_MouseMove( object sender, MouseEventArgs e)
502 {
503 if (mnuMy.Checked && isMouseDown)
504 {
505 this .picView.Cursor = Cursors.SizeAll;
506 // 计算出移动后两个滚动条应该的Value
507 int x = - picView.Left + StartP.X - e.X;
508 int y = - picView.Top + StartP.Y - e.Y;
509
510 // 如果滚动条的value有效则执行操作;
511 if (x >= - PnlMain.Width + 10 && x <= picView.Width - 10 )
512 {
513 if (hScrollBarImageView.Visible)
514 {
515 if (x > 0 )
516 hScrollBarImageView.Value = x > hScrollBarImageView.Maximum ? hScrollBarImageView.Maximum : x;
517 picView.Left = - x - (vScrollBarImageView.Visible && x < 0 ? vScrollBarImageView.Width : 0 );
518 }
519 else
520 picView.Left = - x;
521 }
522
523 if (y >= - PnlMain.Height + 10 && y <= picView.Height - 10 )
524 {
525 if (vScrollBarImageView.Visible)
526 {
527 if (y > 0 )
528 vScrollBarImageView.Value = y > vScrollBarImageView.Maximum ? vScrollBarImageView.Maximum : y;
529 picView.Top = - y - (hScrollBarImageView.Visible && y < 0 ? hScrollBarImageView.Height : 0 );
530 }
531 else
532 picView.Top = - y;
533 }
534
535
536 /* ****************************************************
537 * 给予调整滚动条调整图片位置
538 *****************************************************
539 计算出移动后两个滚动条应该的Value */
540 /* int w = hScrollBarImageView.Value + StartP.X -e.X;
541 int z = vScrollBarImageView.Value + StartP.Y -e.Y;
542 如果滚动条的value有效则执行操作;
543 否则将滚动条按不同情况拉到两头
544 if (w >= 0 && w <= hScrollBarImageView.Maximum)
545 {
546 hScrollBarImageView.Value = w;
547 }
548 else
549 {
550 hScrollBarImageView.Value = (w < 0 ? 0 : hScrollBarImageView.Maximum);
551 }
552 if (z >= 0 && z <= vScrollBarImageView.Maximum)
553 {
554 vScrollBarImageView.Value = z;
555 }
556 else
557 {
558 vScrollBarImageView.Value = (z < 0 ? 0 : vScrollBarImageView.Maximum);
559 } */
560 }
561 else
562 {
563 this .picView.Cursor = Cursors.Default;
564 }
565 }
566
567 private void picView_MouseUp( object sender, MouseEventArgs e)
568 {
569 isMouseDown = false ;
570 }
571 #endregion
572
573 #region 滚动鼠标滚轮实现鼠标缩放
574 /* ***********************************************************
575 * 滚动鼠标滚轮实现鼠标缩放
576 *********************************************************** */
577 private void picView_MouseWheel( object sender, MouseEventArgs e)
578 {
579 switch (keyAction)
580 {
581 case 1 :
582 if (e.Delta > 0 && picView.Width < 10000 )
583 {
584 zoom(e.Location, 1100 );
585 }
586 else if (e.Delta < 0 && picView.Image.Width / picView.Width < 5 )
587 {
588 zoom(e.Location, 900 );
589 }
590 CenterImage(); // 使图片居中显示
591 break ;
592 case 2 :
593 if (hScrollBarImageView.Visible)
594 hScrollBarImageView.Value = (hScrollBarImageView.Value - e.Delta < 0 ? 0 : (hScrollBarImageView.Value - e.Delta > hScrollBarImageView.Maximum ? hScrollBarImageView.Maximum : hScrollBarImageView.Value - e.Delta));
595 break ;
596 default :
597 if (vScrollBarImageView.Visible)
598 vScrollBarImageView.Value = (vScrollBarImageView.Value - e.Delta < 0 ? 0 : (vScrollBarImageView.Value - e.Delta > vScrollBarImageView.Maximum ? vScrollBarImageView.Maximum : vScrollBarImageView.Value - e.Delta));
599 break ;
600 }
601 }
602 #endregion
603
604 #region 窗体按键事件处理
605
606 private void UcImageView_KeyDown( object sender, KeyEventArgs e)
607 {
608 if (e.Control)
609 keyAction = 1 ;
610 else if (e.Shift)
611 keyAction = 2 ;
612 }
613
614 private void UcImageView_KeyUp( object sender, KeyEventArgs e)
615 {
616 keyAction = 0 ;
617 }
618
619 private void picView_KeyDown( object sender, KeyEventArgs e)
620 {
621 if (e.Control)
622 keyAction = 1 ;
623 else if (e.Shift)
624 keyAction = 2 ;
625 else
626 keyAction = 3 ;
627 }
628 private void picView_KeyUp( object sender, KeyEventArgs e)
629 {
630 keyAction = 0 ;
631 }
632 #endregion
633
634 #region 快捷菜单事件代码
635 // 放大图片
636 private void mnuZoomIn_Click( object sender, EventArgs e)
637 {
638 this .ZoomInImage();
639 }
640
641 // 缩小图片
642 private void mnuZoomOut_Click( object sender, EventArgs e)
643 {
644 this .ZoomOutImage();
645 }
646
647 // 适应图片大小
648 private void mnuFitSize_Click( object sender, EventArgs e)
649 {
650 this .FitImageSize();
651 }
652
653 // 漫游图片
654 private void mnuMy_Click( object sender, EventArgs e)
655 {
656 MnuMoveImageChecked = ! mnuMy.Checked;
657 this .MoveImage();
658 }
659
660 // 左旋转图片
661 private void mnuLeftRotate_Click( object sender, EventArgs e)
662 {
663 this .LeftRotateImage();
664 }
665
666 // 右旋转图片
667 private void mnuRightRotate_Click( object sender, EventArgs e)
668 {
669 this .RightRotateImage();
670 }
671
672 #region 打印图片
673 // 打印图片
674 private void mnuPrint_Click( object sender, EventArgs e)
675 {
676 if (picView.Image != null )
677 {
678 PrintDialog printDgImageView = new PrintDialog();
679
680 /* 设置纸张类型
681 PaperSize pg = new PaperSize("A3",297,420);
682 printDocImageView.DefaultPageSettings.PaperSize = pg; */
683 PaperSize pg = new PaperSize( " A3 " , 23 , 33 );
684 printDgImageView.Document = printDocImageView;
685 if (printDgImageView.ShowDialog() == DialogResult.OK)
686 {
687 try
688 {
689 printDocImageView.Print();
690 }
691 catch
692 {
693 // 停止打印
694 printDocImageView.PrintController.OnEndPrint(printDocImageView, new System.Drawing.Printing.PrintEventArgs());
695 }
696 }
697 }
698 else
699 {
700 DialogHelper.ShowWarningMsg( " 对不起,没有要打印的数据! " );
701 }
702 }
703
704 private void printDocImageView_PrintPage( object sender, PrintPageEventArgs e)
705 {
706 this .FitImageSize(); // 实际尺寸
707 if (picView.Image != null )
708 {
709 e.Graphics.DrawImage(picView.Image, picView.Location.X, picView.Location.Y, picView.Width, picView.Height);
710 }
711 }
712 #endregion
713
714 #endregion
715
716 #region 窗体事件
717 private void mnuMy_CheckedChanged( object sender, EventArgs e)
718 {
719 if (OnMnuMoveImageCheckedChanged != null )
720 {
721 MnuMoveImageChecked = this .mnuMy.Checked;
722 OnMnuMoveImageCheckedChanged(sender, EventArgs.Empty);
723 }
724 }
725 #endregion
726 }
727 }


本文转自yonghu86 51CTO博客,原文链接:http://blog.51cto.com/yonghu/1321374,如需转载请自行联系原作者
相关文章
|
3月前
|
API C# 开发者
一款开源免费美观的WinForm UI控件库
一款开源免费美观的WinForm UI控件库
273 9
|
4月前
|
搜索推荐 C#
一个适用于定制个性化界面的WPF UI组件库
一个适用于定制个性化界面的WPF UI组件库
|
9天前
|
C# 开发者 C++
一套开源、强大且美观的WPF UI控件库
一套开源、强大且美观的WPF UI控件库
127 0
|
6月前
SAP UI5 控件 ObjectStatus 的使用方法介绍试读版
SAP UI5 控件 ObjectStatus 的使用方法介绍试读版
50 0
SAP UI5 控件 ObjectStatus 的使用方法介绍试读版
|
9月前
|
XML Android开发 数据格式
Android开发中那些你费力写的控件,其实原生都有
实现一个开关的切换,你会怎么做,写一个layout,一半点击为开,一半点击为关,还是两张图片,点一下开,再点一下关?让你实现一个根据用户的输入弹出一个下拉菜单等等,其实都大可没有必要去自己写,本身Android里都有,下面对各个控件,我会一一举例。
130 0
|
C#
抛砖引玉 【镜像控件】 WPF实现毛玻璃控件不要太简单
原文:抛砖引玉 【镜像控件】 WPF实现毛玻璃控件不要太简单 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Vblegend_2013/article/details/83447420 ...
1681 0
|
关系型数据库
一起谈.NET技术,原创企业级控件库之图片浏览控件
  在上两篇:我介绍了原创企业级控件库之组合查询控件 和原创企业级控件库之大数据量分页控件,受到了很多朋友的支持,给了我很大的动力,在此我特表感谢。有的朋友要求把源码提供上来,我在第一篇就讲了,源码会在我这个系列讲完之后提供,大家先别着急,如果你确实需要,可以时常关注此系列,谢谢大家。
1523 0
|
关系型数据库
原创“.NET研究”企业级控件库之图片浏览控件
  在上两篇:我介绍了原创企业级控件库之组合查询控件 和原创企业级控件库之大数据量分页控件,受到了很多朋友的支持,给了我很大的动力,在此我特表感谢。有的朋友要求把源码提供上来,我在第一篇就讲了,源码会在我这个系列讲完之后提供,大家先别着急,如果你确实需要,可以时常关注此系列,谢谢大家。
1065 0
|
Windows UED API
[UWP]如何实现UWP平台最佳图片裁剪控件
原文:[UWP]如何实现UWP平台最佳图片裁剪控件 前几天我写了一个UWP图片裁剪控件ImageCropper(开源地址),自认为算是现阶段UWP社区里最好用的图片裁剪控件了,今天就来分享下我编码的过程。
1120 0
|
前端开发 C#
silverlight,WPF动画终极攻略之番外 3D切换导航篇(Blend 4开发)
原文:silverlight,WPF动画终极攻略之番外 3D切换导航篇(Blend 4开发) 这篇介绍的是3D导航,点击图标,页面360°翻转的效果!有什么不足的欢迎大家指出来。 1.新建一个usercontrol,命名为menu. 2.按照下图设置一下属性。
1219 0