Mega Code Archive

 
Categories / C# / GUI Windows Form
 

Bitmap Viewer Host

/* User Interfaces in C#: Windows Forms and Custom Controls by Matthew MacDonald Publisher: Apress ISBN: 1590590457 */ using System.Drawing; using System.Windows.Forms; using System.IO; using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; namespace BitmapViewerHost {     /// <summary>     /// Summary description for BitmapViewerHost.     /// </summary>     public class BitmapViewerHost : System.Windows.Forms.Form     {         private BitmapViewer bitmapViewer1;         /// <summary>         /// Required designer variable.         /// </summary>         private System.ComponentModel.Container components = null;         public BitmapViewerHost()         {             //             // Required for Windows Form Designer support             //             InitializeComponent();             //             // TODO: Add any constructor code after InitializeComponent call             //         }         /// <summary>         /// Clean up any resources being used.         /// </summary>         protected override void Dispose( bool disposing )         {             if( disposing )             {                 if (components != null)                  {                     components.Dispose();                 }             }             base.Dispose( disposing );         }         #region Windows Form Designer generated code         /// <summary>         /// Required method for Designer support - do not modify         /// the contents of this method with the code editor.         /// </summary>         private void InitializeComponent()         {             this.bitmapViewer1 = new BitmapViewer();             this.SuspendLayout();             //              // bitmapViewer1             //              this.bitmapViewer1.Anchor = (((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)                  | System.Windows.Forms.AnchorStyles.Left)                  | System.Windows.Forms.AnchorStyles.Right);             this.bitmapViewer1.Dimension = 80;             this.bitmapViewer1.Directory = null;             this.bitmapViewer1.DockPadding.All = 1;             this.bitmapViewer1.Location = new System.Drawing.Point(12, 12);             this.bitmapViewer1.Name = "bitmapViewer1";             this.bitmapViewer1.Size = new System.Drawing.Size(300, 244);             this.bitmapViewer1.Spacing = 10;             this.bitmapViewer1.TabIndex = 0;             this.bitmapViewer1.PictureSelected += new BitmapViewer.PictureSelectedDelegate(this.bitmapViewer1_PictureSelected);             //              // BitmapViewerHost             //              this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);             this.ClientSize = new System.Drawing.Size(320, 266);             this.Controls.AddRange(new System.Windows.Forms.Control[] {                                                                           this.bitmapViewer1});             this.Name = "BitmapViewerHost";             this.Text = "BitmapViewerHost";             this.Load += new System.EventHandler(this.BitmapViewerHost_Load);             this.ResumeLayout(false);         }         #endregion         /// <summary>         /// The main entry point for the application.         /// </summary>         [STAThread]         static void Main()          {             Application.Run(new BitmapViewerHost());         }         private void BitmapViewerHost_Load(object sender, System.EventArgs e)         {             bitmapViewer1.Directory = Application.StartupPath;             bitmapViewer1.Directory = "c:\\windows";         }         private void bitmapViewer1_PictureSelected(object sender, PictureSelectedEventArgs e)         {                 MessageBox.Show("You chose " + e.FileName);         }          }     /// <summary>     /// Summary description for BitmapViewer.     /// </summary>     public class BitmapViewer : System.Windows.Forms.UserControl     {         internal System.Windows.Forms.Panel pnlPictures;         /// <summary>          /// Required designer variable.         /// </summary>         private System.ComponentModel.Container components = null;         public BitmapViewer()         {             // This call is required by the Windows.Forms Form Designer.             InitializeComponent();             // TODO: Add any initialization after the InitForm call         }         /// <summary>          /// Clean up any resources being used.         /// </summary>         protected override void Dispose( bool disposing )         {             if( disposing )             {                 if(components != null)                 {                     components.Dispose();                 }             }             base.Dispose( disposing );         }         #region Component Designer generated code         /// <summary>          /// Required method for Designer support - do not modify          /// the contents of this method with the code editor.         /// </summary>         private void InitializeComponent()         {             this.pnlPictures = new System.Windows.Forms.Panel();             this.SuspendLayout();             //              // pnlPictures             //              this.pnlPictures.AutoScroll = true;             this.pnlPictures.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;             this.pnlPictures.Dock = System.Windows.Forms.DockStyle.Fill;             this.pnlPictures.Location = new System.Drawing.Point(1, 1);             this.pnlPictures.Name = "pnlPictures";             this.pnlPictures.Size = new System.Drawing.Size(530, 218);             this.pnlPictures.TabIndex = 1;             //              // BitmapViewer             //              this.Controls.AddRange(new System.Windows.Forms.Control[] {                                                                           this.pnlPictures});             this.DockPadding.All = 1;             this.Name = "BitmapViewer";             this.Size = new System.Drawing.Size(532, 220);             this.ResumeLayout(false);         }         #endregion              public delegate void PictureSelectedDelegate(object sender, PictureSelectedEventArgs e);         public event PictureSelectedDelegate PictureSelected;         // The directory that will be scanned for image.         private string directory="";         // Each picture box will be a square of dimension X dimension pixels.         private int dimension;         // The space between the images and the top, left, and right sides.         private int border = 5;         // The space between each image.         private int spacing;         // The images that were found in the selected directory.         private ArrayList images = new ArrayList();         public string Directory         {             get             {                 return directory;             }             set             {                 directory = value;                 GetImages();                 UpdateDisplay();             }         }         public int Dimension         {             get             {                 return dimension;             }             set             {                 dimension = value;                 UpdateDisplay();             }         }         public int Spacing         {             get             {                 return spacing;             }             set             {                 spacing = value;                 UpdateDisplay();             }         }         private void GetImages()         {             images.Clear();             if (this.Directory != "" && this.directory != null)             {                 DirectoryInfo dir = new DirectoryInfo(directory);                 foreach (FileInfo file in dir.GetFiles("*.bmp"))                 {                     images.Add(new NamedImage(Bitmap.FromFile(file.FullName), file.Name));                 }             }         }         private void UpdateDisplay()         {             // Clear the current display.             pnlPictures.Controls.Clear();             // Row and Col will track the current position where pictures are             // being inserted. They begin at the top-right corner.             int row = border, col = border;             // Iterate through the Images collection, and create PictureBox controls.             foreach (NamedImage image in images)             {                 PictureBox pic = new PictureBox();                 pic.Image = image.Image;                 pic.Tag = image.FileName;                 pic.Size = new Size(dimension, dimension);                 pic.Location = new Point(col, row);                 pic.BorderStyle = BorderStyle.FixedSingle;                 // StrechImage mode gives us the "thumbnail" ability.                 pic.SizeMode = PictureBoxSizeMode.StretchImage;                 // Display the picture.                 pnlPictures.Controls.Add(pic);                 // Move to the next column.                 col += dimension + spacing;                 // Handle the event.                 pic.Click += new EventHandler(this.pic_Click);                 // Move to next line if no more pictures will fit.                 if ((col + dimension + spacing + border) > this.Width)                 {                     col = border;                     row += dimension + spacing;                 }             }         }         public void RefreshImages()         {             GetImages();             UpdateDisplay();         }         protected override void OnSizeChanged(System.EventArgs e)         {             UpdateDisplay();             base.OnSizeChanged(e);         }         private PictureBox picSelected;         private void pic_Click(object sender, System.EventArgs e)         {             // Clear the border style from the last selected picture box.             if (picSelected != null)             {                 picSelected.BorderStyle = BorderStyle.FixedSingle;             }             // Get the new selection.             picSelected = (PictureBox)sender;             picSelected.BorderStyle = BorderStyle.Fixed3D;             // Fire the selection event.             PictureSelectedEventArgs args = new                  PictureSelectedEventArgs((string)picSelected.Tag, picSelected.Image);             if (PictureSelected != null)             {                 PictureSelected(this, args);             }         }         private class NamedImage         {             public Image Image;             public string FileName;             public NamedImage(Image image, string fileName)             {                 this.Image = image;                 this.FileName = fileName;             }         }          }     public class PictureSelectedEventArgs : EventArgs     {         public string FileName;         public Image Image;         public PictureSelectedEventArgs(String fileName, Image image)         {             this.FileName = fileName;             this.Image = image;         }     }      }