⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 imagebrowser.cs

📁 C#纸牌游戏,做的还是比较精致的.值得学习.
💻 CS
字号:
using System;
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Windows.Forms;

namespace CardGame
{
	/// <summary>
	/// ImageBrowser 的摘要说明。
	/// </summary>
	public class ImageBrowser : System.Windows.Forms.UserControl
	{
		/// <summary> 
		/// 必需的设计器变量。
		/// </summary>
		private System.ComponentModel.Container components = null;

		public ImageBrowser()
		{
			// 该调用是 Windows.Forms 窗体设计器所必需的。
			InitializeComponent();

			// TODO: 在 InitializeComponent 调用后添加任何初始化

		}

		/// <summary> 
		/// 清理所有正在使用的资源。
		/// </summary>
		protected override void Dispose( bool disposing )
		{
			if( disposing )
			{
				if(components != null)
				{
					components.Dispose();
				}
			}
			base.Dispose( disposing );
		}

		#region 组件设计器生成的代码
		/// <summary> 
		/// 设计器支持所需的方法 - 不要使用代码编辑器 
		/// 修改此方法的内容。
		/// </summary>
		private void InitializeComponent()
		{
			// 
			// ImageBrowser
			// 
			this.Name = "ImageBrowser";
			this.Size = new System.Drawing.Size(296, 224);
			this.Load += new System.EventHandler(this.ImageBrowser_Load);

		}
		#endregion

		private void ImageBrowser_Load(object sender, System.EventArgs e)
		{
			
		}

		public event EventHandler ItemSelected;

		private bool showImages=false;
		public bool ShowImages
		{
			get
			{
				return showImages;
			}
			set
			{
				if(value&&!showImages)
				{
					this.Controls.Clear();
					if(imageList!=null)
					{
						Point[] points=ItemLocations(imageList.Images.Count,imageList.ImageSize);
						for(int i=0;i<points.Length;i++)
						{
							ImageItem item=new ImageItem(i,imageList.Images[i]);
							item.Location=points[i];
							item.MouseDown+=new MouseEventHandler(item_MouseDown);
							this.Controls.Add(item);
						}
					}
				}
				else if(!value&&showImages)
				{
					this.Controls.Clear();
				}
				showImages=value;
			}
		}

		private Point[] ItemLocations(int TotalCount,Size ItemSize)
		{
			int wCount=Convert.ToInt32((this.Width+hSpace)/(ItemSize.Width+hSpace));

			if(wCount==0)return null;

			int hCount=Convert.ToInt32(TotalCount/wCount);
			if(TotalCount%wCount>0)hCount+=1;

			Point[] points=new Point[TotalCount];

			for(int i=0;i<hCount;i++)
			{
				int dCount=((TotalCount-i*wCount)<wCount)?(TotalCount-i*wCount):wCount;
				for(int j=0;j<dCount;j++)
				{
					points[j+i*wCount]=new Point(j*(hSpace+ItemSize.Width),i*(vSpace+ItemSize.Height));
				}
			}

			return points;
		}

		public Color SelectedColor
		{
			get
			{
				return selectedColor;
			}
			set
			{
				selectedColor=value;
			}
		}
		private int hSpace=8;
		private int vSpace=8;
		private ImageList imageList=null;

		public int HSpace
		{
			get
			{
				return hSpace;
			}
			set
			{
				hSpace=value;
			}
		}

		public int VSpace
		{
			get
			{
				return vSpace;
			}
			set
			{
				vSpace=value;
			}
		}

		public ImageList ImageList
		{
			get
			{
				return imageList;
			}
			set
			{
				imageList=value;
			}
		}
		private int selectedIndex=0;
		public int SelectedIndex
		{
			get
			{
				return selectedIndex;
			}
			set
			{
				if(selectedIndex==value)return;
				if(value>=0&&value<imageList.Images.Count)
				{
					((ImageItem)this.Controls[value]).SelectMe();
				}
				else
				{
					if(selectedImageItem!=null)selectedImageItem.BackColor=BaseBackColor;
				}
				selectedIndex=value;
			}
		}
		private void item_MouseDown(object sender, MouseEventArgs e)
		{
			if(ItemSelected!=null)ItemSelected(sender,e);
		}
		private static Color selectedColor=Color.Blue;
		private static ImageItem selectedImageItem;
		private static Color BaseBackColor;

		public class ImageItem:Panel
		{
			private PictureBox picBox=new PictureBox();
			
			private const int AreaOffset=2;
			
			private int index=0;

			public ImageItem():this(null)
			{
				
			}
			public ImageItem(Image image):this(0,image)
			{
				
			}
			public ImageItem(int index,Image image):base()
			{
				this.DockPadding.All=AreaOffset;
				this.BorderStyle=BorderStyle.None;
				picBox.Dock=DockStyle.Fill;
				picBox.BorderStyle=BorderStyle.None;
				picBox.SizeMode=PictureBoxSizeMode.AutoSize;
				this.Controls.Add(picBox);
				BaseBackColor=this.BackColor;
				picBox.SizeChanged+=new EventHandler(picBox_SizeChanged);
				picBox.MouseDown+=new MouseEventHandler(picBox_MouseDown);

				this.index=index;
				this.Image=image;
			}

			public int Index
			{
				get
				{
					return index;
				}
			}

			public Image Image
			{
				get
				{
					return picBox.Image;
				}
				set
				{
					picBox.Image=value;
				}
			}

			private void picBox_SizeChanged(object sender, EventArgs e)
			{
				this.Width=picBox.Width+2*AreaOffset;
				this.Height=picBox.Height+2*AreaOffset;
			}

			public void SelectMe()
			{
				if(selectedImageItem!=null)
				{
					selectedImageItem.BackColor=BaseBackColor;
				}
				this.BackColor=selectedColor;
				selectedImageItem=this;
			}

			private void picBox_MouseDown(object sender, MouseEventArgs e)
			{
				if(e.Button==MouseButtons.Left)
				{
					SelectMe();
					base.OnMouseDown(e);
				}
			}
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -