SSISO Community

갤러리정

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;
                }

        }


        
}

510 view

4.0 stars