在.NET中嵌入和使用资源文件

作者: 孟宪会 出自: 【孟宪会之精彩世界】 发布日期: 2003-8-5 17:35:21

嵌入和使用资源文件,以下是全部源代码:

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Reflection;
using System.IO;
using System.Diagnostics;

namespace ResourceDemo
{
    /// <summary>
    /// Summary description for Form1.
    /// </summary>
    public class Form1 : System.Windows.Forms.Form
    {        
        ArrayList pics;
        private System.Windows.Forms.GroupBox groupBox1;
        private System.Windows.Forms.PictureBox pBox;
        private System.Windows.Forms.Button btnDisplay;
        private System.Windows.Forms.TextBox txtInfo;
        /// <summary>
        /// Required designer variable.
        /// </summary>
        private System.ComponentModel.Container components = null;

        public Form1()
        {
            //
            // Required for Windows Form Designer support
            //
            InitializeComponent();

            // Instantiate our ArrayList
            pics = new ArrayList();
        }

        /// <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.pBox = new System.Windows.Forms.PictureBox();
            this.groupBox1 = new System.Windows.Forms.GroupBox();
            this.btnDisplay = new System.Windows.Forms.Button();
            this.txtInfo = new System.Windows.Forms.TextBox();
            this.groupBox1.SuspendLayout();
            this.SuspendLayout();
            // 
            // pBox
            // 
            this.pBox.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
            this.pBox.Location = new System.Drawing.Point(8, 8);
            this.pBox.Name = "pBox";
            this.pBox.Size = new System.Drawing.Size(264, 272);
            this.pBox.TabIndex = 0;
            this.pBox.TabStop = false;
            this.pBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
            // 
            // groupBox1
            // 
            this.groupBox1.Controls.AddRange(new System.Windows.Forms.Control[] {
                                                this.txtInfo,
                                                this.btnDisplay});
            this.groupBox1.Location = new System.Drawing.Point(288, 8);
            this.groupBox1.Name = "groupBox1";
            this.groupBox1.Size = new System.Drawing.Size(192, 264);
            this.groupBox1.TabIndex = 1;
            this.groupBox1.TabStop = false;
            // 
            // btnDisplay
            // 
            this.btnDisplay.Location = new System.Drawing.Point(48, 24);
            this.btnDisplay.Name = "btnDisplay";
            this.btnDisplay.Size = new System.Drawing.Size(96, 23);
            this.btnDisplay.TabIndex = 0;
            this.btnDisplay.Text = "Display Picture";
            this.btnDisplay.Click += new System.EventHandler(this.button1_Click);
            // 
            // txtInfo
            // 
            this.txtInfo.Location = new System.Drawing.Point(8, 56);
            this.txtInfo.Multiline = true;
            this.txtInfo.Name = "txtInfo";
            this.txtInfo.ReadOnly = true;
            this.txtInfo.Size = new System.Drawing.Size(176, 200);
            this.txtInfo.TabIndex = 2;
            this.txtInfo.Text = "txtInfo";
            // 
            // Form1
            // 
            this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
            this.ClientSize = new System.Drawing.Size(496, 293);
            this.Controls.AddRange(new System.Windows.Forms.Control[] {
                                        this.groupBox1,
                                        this.pBox});
            this.Name = "Form1";
            this.Text = "Form1";
            this.Load += new System.EventHandler(this.Form1_Load);
            this.groupBox1.ResumeLayout(false);
            this.ResumeLayout(false);
        }
        #endregion

        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main() 
        {
            Application.Run(new Form1());
        }

        private void button1_Click(object sender, System.EventArgs e)
        {
            // go to a random picture in our arraylist and
            // display it
            Random generator = new Random();
            Bitmap bmp = pics[ generator.Next(pics.Count) ] as Bitmap;
            if(!(null==bmp))
            {
                pBox.Image = bmp;
            }
            bmp = null;
            generator = null;
        }

        private void Form1_Load(object sender, System.EventArgs e)
        {            
            Stream imgStream = null;
            Bitmap bmp = null;            

            // get a reference to the current assembly
            Assembly a = Assembly.GetExecutingAssembly();
        
            // get a list of resource names from the manifest
            string [] resNames = a.GetManifestResourceNames();

            // populate the textbox with information about our resources
            // also look for images and put them in our arraylist
            txtInfo.Clear();
            
            txtInfo.Text += String.Format("Found {0} resources\r\n", resNames.Length);
            txtInfo.Text += "----------\r\n";
            foreach(string s in resNames)
            {
                txtInfo.Text += s + "\r\n";
                if(s.EndsWith(".bmp"))
                {
                    // attach to stream to the resource in the manifest
                    imgStream = a.GetManifestResourceStream(s);
                    if( !(null==imgStream) )
                    {                    
                        // create a new bitmap from this stream and 
                        // add it to the arraylist
                        bmp = Bitmap.FromStream( imgStream ) as Bitmap;
                        if( !(null==bmp) )
                        {
                            pics.Add( bmp );
                        }
                        bmp = null;
                        imgStream.Close();
                        imgStream = null;
                    }
                }
            }            
            txtInfo.Text += "----------\r\n";
            txtInfo.Text += String.Format("Found {0} Bitmaps\r\n", pics.Count);                        
        }
    }
}
Contributors: FHL