winform中图片的左移 右移并记忆移动的位置

上篇文章实现了winform 中图片的左旋 右旋,在此基础上增加 左移 右移 并记忆移动的位置。 并整合在一起发布。

上篇文章地址。http://blog.csdn.net/kongwei521/article/details/8425421

 

 

上贴部分核心代码:

Form1.cs 代码

private List<PreviewControl> poPreviews = null;
		public Form1()
		{
			InitializeComponent();
			poPreviews = new List<PreviewControl>();
		}
		/// <summary>
		/// 取得选择的图片
		/// </summary>
		/// <returns></returns>
		private PreviewControl GetCurrentPreview()
		{
			for (int i = 0; i < poPreviews.Count; i++)
			{
				if (poPreviews[i].Selected)
				{
					return poPreviews[i];
				}
			}
			return null;
		}
                  /// <summary>
		/// 前移
		/// </summary>
		/// <param name="eventSender"></param>
		/// <param name="eventArgs"></param>
		private void btnBackMove_Click(object sender, EventArgs e)
		{
			PreviewControl oCurrent = GetCurrentPreview();
			if (oCurrent == null)
			{
				return;
			}
			PreviewControl oTemp = null;
			int iAt = poPreviews.IndexOf(oCurrent);
			//判断移动的位置
			if (iAt >= 1)
			{
				oTemp = poPreviews[iAt - 1];
				poPreviews.RemoveAt(iAt - 1);
				poPreviews.Insert(iAt, oTemp);
			}
			for (int i = 0; i < poPreviews.Count; i++)
			{
				pnlPreviews.Controls.SetChildIndex(poPreviews[i], i);
			}
		}

		/// <summary>
		/// 后移
		/// </summary>
		/// <param name="eventSender"></param>
		/// <param name="eventArgs"></param>
		private void btnNextMove_Click(object sender, EventArgs e)
		{
			PreviewControl oCurrent = GetCurrentPreview();
			if (oCurrent == null)
			{
				return;
			}
			PreviewControl oTemp = null;
			int iAt = poPreviews.IndexOf(oCurrent);

			if (iAt < poPreviews.Count - 1)
			{
				oTemp = poPreviews[iAt + 1];
				poPreviews.RemoveAt(iAt + 1);
				poPreviews.Insert(iAt, oTemp);
			}
			for (int i = 0; i < poPreviews.Count; i++)
			{
				pnlPreviews.Controls.SetChildIndex(poPreviews[i], i);
			}
		}


PreviewControll.cs 自定义控件中代码

 public partial class PreviewControl : UserControl     {         [DllImport("user32.dll")]         extern static short GetKeyState(int vKey);

        /// <summary>         /// 加载图片         /// </summary>         private string psImageLocation = String.Empty;         /// <summary>         /// 选择状态         /// </summary>         private bool pbSelected = false;

        /// <summary>         /// 多个选择的状态         /// </summary>         private bool pbMultiMode = false;

        /// <summary>   /// 左旋,右旋后直接保存         /// false:不保存、  true:保存         /// </summary>         private bool pbRotateSaveFlg = true;

        /// <summary>         /// PDF文件类型的标志         /// TRUE:PDF文件  FALSE:不是PDF文件         /// </summary>         private bool pbPdfFlg = false;

        /// <summary>         /// 选择时的颜色         /// </summary>         private Color poSelectColor = SystemColors.Highlight;

        /// <summary>         /// 未选择的颜色         /// </summary>         private Color poUnSelectColor = SystemColors.Control;

        /// <summary>         /// 图片左旋右旋的值         /// </summary>         private int piRoteSum = 0;

        /// <summary>         /// 右击点击标签         /// </summary>         private bool pbRightClickFlg = false;

        /// <summary>         /// PictrueBoxのセレクトイベントハンドラー         /// </summary>         private event EventHandler poPictureSelected;                 /// <summary>         /// 图片预览控件初始化         /// </summary>         public PreviewControl()         {             InitializeComponent();    pictureBox1.Click -= new EventHandler(pictureBox1_Click);    pictureBox1.Click += new EventHandler(pictureBox1_Click);    pictureBox2.Click -= new EventHandler(pictureBox2_Click);    pictureBox2.Click += new EventHandler(pictureBox2_Click);         }

        private bool IsControlKeyDown()         {             return (GetKeyState(0x0011) & 0x0000FF00) != 0;         }

        private bool IsShiftKeyDown()         {             return (GetKeyState(0x0010) & 0x0000FF00) != 0;         }

        /// <summary>         /// 右击的标签         /// </summary>         public bool RightClickFlg         {             get             {                 return pbRightClickFlg;             }             set             {                 pbRightClickFlg = value;             }         }

        /// <summary>         /// 加载的图片         /// </summary>         public string ImageLocation         {             set             {                 psImageLocation = value;                 if (psImageLocation.Length == 0)                 {                     pictureBox1.Visible = false;                     webBrowser1.Visible = false;                 }                 else if (value.EndsWith(".pdf", StringComparison.CurrentCultureIgnoreCase))                 {                     webBrowser1.Visible = true;                     webBrowser1.Navigate(value);                     pictureBox2.Tag = value;                     pictureBox2.Visible = true;                     pictureBox1.Visible = false;                     pbPdfFlg = true;                 }                 else                 {                     webBrowser1.Visible = false;                     pictureBox1.Visible = true;                     pictureBox1.ImageLocation = value;                 }             }             get             {                 return psImageLocation;             }         }         /// <summary>         /// 选择时的颜色         /// </summary>         public Color SelectColor         {             get             {                 return poSelectColor;             }             set             {                 poSelectColor = value;             }         }

        /// <summary>         /// 没有选择的颜色         /// </summary>         public Color UnSelectColor         {             get             {                 return poUnSelectColor;             }             set             {                 poUnSelectColor = value;             }         }

        /// <summary>         /// 多选的场合为True         /// </summary>         public bool MultiMode         {             get             {                 return pbMultiMode;             }             set             {                 pbMultiMode = value;             }         }

        /// <summary>         /// 多选         /// </summary>         public bool MultiSelected         {             get             {                 return pbSelected;             }             set             {                 if (value == pbSelected)                 {                     return;                 }                 pbSelected = value;                 if (value)                 {                     BackColor = poSelectColor;                 }                 else                 {                     BackColor = poUnSelectColor;                 }             }         }

        /// <summary>         /// 单选         /// </summary>         public bool Selected         {             get             {                 return pbSelected;             }             set             {                 if (value == pbSelected)                 {                     if (!pbMultiMode)                     {                         return;                     }                     else                     {                                                BackColor = poUnSelectColor;                     }                 }                 pbSelected = value;                 if (value)                 {                     BackColor = poSelectColor;                     Control oParent = Parent;                     if (oParent != null)                     {                         for (int i = 0; i < oParent.Controls.Count; i++)                         {                             if (oParent.Controls[i] != this &&                                 ((oParent.Controls[i] is PreviewControl)                                 || (oParent.Controls[i] is WebBrowser))                                 )                             {                                 ((PreviewControl)oParent.Controls[i]).Selected = false;                             }                         }                     }                 }                 else                 {                     BackColor = poUnSelectColor;                 }             }         }

        /// <summary>         /// 图片旋转的值入 90 180 270 度         /// </summary>         public int RotateSum         {             get             {                 return piRoteSum;             }             set             {                 piRoteSum = value;             }         }

        /// <summary>         /// 保存旋转后位置的状态         /// </summary>         public bool RotateSaveFlg         {             set             {                 pbRotateSaveFlg = value;             }         }

        /// <summary>         /// 左旋         /// </summary>         public void RotateLeft()         {             if (pictureBox1.Image != null)             {                 //扩展名判断                 if (CheckFileExtension(this.Tag.ToString()) == FileExtension.PDF)                 {                     return;                 }                 Image oSrc = pictureBox1.Image;                 Bitmap oDst = new Bitmap(oSrc);                 oDst.RotateFlip(RotateFlipType.Rotate270FlipNone);                 pictureBox1.Image = oDst;                 piRoteSum = piRoteSum + 270;                 if (!pbRotateSaveFlg)                 {                     return;                 }                 ImageSave((Bitmap)pictureBox1.Image, 100, pictureBox1.ImageLocation,0,0);             }         }         /// <summary>         /// 右旋         /// </summary>         public void RotateRight()         {             if (pictureBox1.Image != null)             {     //扩展名判断                 if (CheckFileExtension(this.Tag.ToString()) == FileExtension.PDF)                 {                     return;                 }                 Image oSrc = pictureBox1.Image;                 Bitmap oDst = new Bitmap(oSrc);                 oDst.RotateFlip(RotateFlipType.Rotate90FlipNone);                 pictureBox1.Image = oDst;                 piRoteSum = piRoteSum + 90;                 if (!pbRotateSaveFlg)                 {                     return;                 }                 ImageSave((Bitmap)pictureBox1.Image, 100, pictureBox1.ImageLocation,0,0);             }         }

        /// <summary>         /// 清除图片的记忆位置         /// </summary>         public void ClearImageMemory()         {             if (pictureBox1.Image != null)             {                 pictureBox1.Image.Dispose();             }             if (pictureBox2.Image != null)             {                 pictureBox2.Image.Dispose();             }             if (!webBrowser1.IsDisposed)             {                 webBrowser1.Dispose();             }         }

        /// <summary>         /// 利用GC回收释放内存         /// </summary>         public void GCCollect()         {             pictureBox1.Image = null;             pictureBox2.Image = null;             webBrowser1 = null;         }         private void pictureBox2_Click(object sender, EventArgs e)         {             PictureBoxClick(sender, e);         }         private void pictureBox1_Click(object sender, EventArgs e)         {             PictureBoxClick(sender, e);         }

        private void PictureBoxClick(object sender, EventArgs e)         {             if (pbMultiMode)             {                 if (IsControlKeyDown())                 {                     MultiSelected = !MultiSelected;                 }                 else if (IsShiftKeyDown())                 {                     Control oParent = Parent;                     if (oParent != null)                     {                         int iFromIndex = 0;                         //选择图片的标签                         bool bHadSelected = false;                         for (int i = 0; i < oParent.Controls.Count; i++)                         {                             if (oParent.Controls[i] != this &&                                 oParent.Controls[i] is PreviewControl                                 && oParent.Controls[i].BackColor == SelectColor)                             {                                 bHadSelected = true;                                 iFromIndex = i;                                 break;                             }                         }

                        int iToIndex = 0;                         for (int j = 0; j < oParent.Controls.Count; j++)                         {                             if (oParent.Controls[j] == this &&                               oParent.Controls[j] is PreviewControl)                             {                                 iToIndex = j;                                 break;                             }                         }

                        if (!bHadSelected)                         {                             iFromIndex = iToIndex;                         }

                        if (iToIndex < iFromIndex)                         {                             int temp = iFromIndex;                             iFromIndex = iToIndex;                             iToIndex = temp;                         }

                        for (int k = iFromIndex; k <= iToIndex; k++)                         {                             if (oParent.Controls[k] is PreviewControl)                             {                                 oParent.Controls[k].BackColor = SelectColor;                                 ((PreviewControl)oParent.Controls[k]).MultiSelected = true;                             }                         }                     }                 }                 else                 {                     Selected = true;                 }             }             else             {                 Selected = true;                 if (poPictureSelected != null)                 {                     poPictureSelected(sender, e);                 }             }         }

  #region 文件扩展名格式check   public static FileExtension CheckFileExtension(string fileName)   {    if (!File.Exists(fileName))    {     return FileExtension.VALIDFILE;    }    FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);    System.IO.BinaryReader br = new System.IO.BinaryReader(fs);    string fileType = string.Empty;    FileExtension extension = FileExtension.VALIDFILE;    try    {     byte data = br.ReadByte();     fileType += data.ToString();     data = br.ReadByte();     fileType += data.ToString();     extension = (FileExtension)Enum.Parse(typeof(FileExtension), fileType);     if (extension.ToString().Equals(fileType))     {      extension = FileExtension.VALIDFILE;     }    }    catch    {     extension = FileExtension.VALIDFILE;    }    finally    {     if (fs != null)     {      fs.Close();      br.Close();     }    }

   return extension;   }   //文件枚举类型   public enum FileExtension   {    JPEG = 255216,    TIF = 7373,    GIF = 7173,    BMP = 6677,    PNG = 13780,    PDF = 3780,    VALIDFILE = 9999999   }   #endregion

  /// <summary>   /// 保存图片   /// </summary>   /// <param name="src">图片路径</param>   /// <param name="scale">比例</param>   /// <param name="asSaveFile"></param>   /// <param name="aiWidth">宽度</param>   /// <param name="aiHeight">高度</param>   public static void ImageSave(Bitmap src, int scale, string asSaveFile, int aiWidth, int aiHeight)   {    int w = src.Width;    int h = src.Height;    if (scale < 100)    {     w = aiWidth;     h = aiHeight;    }    Bitmap dest = new Bitmap(w, h);    Graphics g = Graphics.FromImage(dest);    g.SmoothingMode = SmoothingMode.HighQuality;    g.InterpolationMode = InterpolationMode.High;    g.DrawImage(src, 0, 0, w, h);    g.Dispose();    dest.Save(asSaveFile, ImageFormat.Jpeg);    dest.Dispose();   }     }


好了。代码都在这了。希望对各位能有所帮助,

 

下载地址:

http://files.cnblogs.com/kongwei521/WindowsFormsApplication.7z

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值