Jak vložit a přístup k prostředkům pomocí aplikace Visual C#

Překlady článku Překlady článku
ID článku: 319292 - Produkty, které se vztahují k tomuto článku.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

Souhrn

Tento podrobný článek popisuje, jak pomocí aplikace Visual C# vložit prostředky jako část sestavení a poté získat přístup k prostředkům v době běhu.

Přehled

Na.NET Framework můžete zapouzdřit soubory jako část kompilovaném sestavení. Tyto soubory jsou označovány jako vložené prostředky. Tyto prostředky jsou zcela oddělené od souborů s příponou Resources a RESX, které jsou přidruženy k sestavení. Dostanete za běhu pomocí těchto prostředků Sestavení Třída System.Reflection obor názvů.

Hlavní výhodou vkládání prostředky manifestu je, protože soubory jsou součástí vaší zkompilovaném sestavení, uživatel nemůže náhodnému odstranění nebo misplace soubory, které jsou kritické pro aplikace, které v některých případech může zabránit spuštění programu. Jedno omezení tohoto přístupu je, že nelze uložit změny do tohoto souboru na sestavení bez nutnosti program. Z tohoto důvodu zahrnout pouze soubory, které se nezmění během doby platnosti aplikace jako vložený prostředek.

Podrobné demonstrace.

Přidat vložené prostředky projektu, musíte nejprve přidat soubory jako část projektu. Po přidání souborů do projektu, můžete získat přístup a zobrazit zdroje až System.Reflection obor názvů.

Přidat vložené prostředky.

Chcete-li přidat textový soubor a soubor bitové kopie do projektu jako vložené prostředky, postupujte takto:
  1. Vytvořte nový projekt aplikace systému Windows pro tuto ukázku. Tento formulář slouží k zobrazení zdrojů, které jsou přístupné z vykonávajícího shromáždění v době spuštění.
  2. Klepněte pravým tlačítkem myši na název vašeho projektu, klepněte na tlačítko Přidata klepněte na tlačítko Přidat novou položku.
  3. V Nová položka Vyberte položku Textový soubor z nabídky a název souboru MyTextFile.txt. Při otevření souboru v integrované vývojové prostředí (IDE), přidejte text a potom zavřete soubor.
  4. Opakujte kroky 1 a 2 přidejte bitmapového obrazu do projektu, ale namísto výběru Textový soubor Vybrat nový typ položky Soubor rastrového obrázkua poté změňte název souboru MyImage.bmp. Při otevření nového obrazu v IDE je něco kreslit v obraze a zavřete soubor.
  5. Klepněte pravým tlačítkem myši na textový soubor nebo bitmapy a vyberte Vlastnosti.
  6. V Vlastnosti dialogovém okně vyhledejte Vytvořit akce Vlastnost. Standardně je tato vlastnost nastavena na Obsah. Klepněte na tlačítko Vlastnosti a změnit Vytvořit akce Vlastnost Vložený zdroj.
  7. Opakujte kroky 4 a 5 pro druhý soubor.
Při příštím vytváření projektu, kompilátor přidá tyto soubory do vašeho sestavení. Kompilátor oboru názvů root projektu přidá k názvu prostředku, pokud je součástí projektu. Například je-li kořenový obor názvů projektu MyNamespace, prostředky jsou pojmenovány MyNamespace.MyTextFile.txt a MyNamespace.MyImage.bmp.

POZNÁMKA:: Názvy souborů prostředků rozlišují velká a malá písmena. Při přístupu k prostředkům, je nutné použít přesného a v případě název souboru. Pokud nepoužíváte přesného a v případě název souboru, volání metody přístup ManifestResourceStream Vrátí Nic, a systém nevyvolává výjimku.

POZNÁMKA:: Chcete-li ověřit názvy zdrojů, můžete zobrazit data manifestu, který uvádí zahrnuty prostředky Microsoft Disassembler pro zprostředkující jazyk (ILDASM).

Přístup k prostředkům

Chcete-li získat přístup k prostředkům, které jste vložili v manifestu sestavení, vaše, importovat System.IO a System.Reflection obory názvů, takto:
   using System.IO;
   using System.Reflection;
				
Na System.IO obor názvů poskytuje definici datového proudu a System.Reflection definuje obor názvů Sestavení Třída, která poskytuje metody pro přístup k prostředkům, vložené do vašeho sestavení.

Když deklarujete následující v oblasti obecné prohlášení, jsou prostředky z sestavení číst při načtení formuláře:
   Assembly _assembly;
   Stream _imageStream;
   StreamReader _textStreamReader;
				
POZNÁMKA:: K přístupu Zatížení události v editoru kódu formuláře poklepejte na formulář v návrhovém editoru.

Načíst prostředek ze sestavení, který je prováděn aktuální kód, musíte získat tuto instanci. Chcete-li to provést, použijte GetExecutingAssembly způsob sestavení, takto:
   _assembly = Assembly.GetExecutingAssembly();
				
Čtení informací ze zdroje proudu bude provedeno volání metody GetManifestResourceStream. Parametr, který je předán do této metody je název prostředku, který je přístupný. Dva zdroje jsou potom přečíst jejich odpovídající datové proudy, jako Zatížení události formuláře proveden.
   _imageStream = _assembly.GetManifestResourceStream("MyNameSpace.MyImage.bmp");
   _textStreamReader = new StreamReader(_assembly.GetManifestResourceStream("MyNameSpace.MyTextFile.txt"));
				
Kód v Zatížení události formuláře je podobná následující:
   try
   {
      _assembly = Assembly.GetExecutingAssembly();
      _imageStream = _assembly.GetManifestResourceStream("MyNamespace.MyImage.bmp");
      _textStreamReader = new StreamReader(_assembly.GetManifestResourceStream("MyNamespace.MyTextFile.txt"));
   }
   catch
   {
      MessageBox.Show("Error accessing resources!");
   }
				
Na Try-Catch prohlášení, známé jako zpracování chyb strukturované v.NETTO, slouží k odhalení případných chyb, které mohou při došlo k instanci Sestavení Třída přistupuje k prostředkům.

Zobrazení zdrojů

Tento příklad používá dvě tlačítka zobrazit vložené prostředky. Klepnete-li na první tlačítko, bitmapovým obrazem, který je založen na prostředek, který čte z sestavení je vytvořen a zobrazeny v Ovládacího PictureBox Chcete-li ovládací prvek ve formuláři. Druhé tlačítko přečte z prostředku text a zobrazí text v textovém poli.

Chcete-li zobrazit vložené prostředky, postupujte takto:
  1. Přidat Ovládacího PictureBox řízení do formuláře.
  2. Přidat nový Tlačítko ovládacího prvku ve formuláři a poté změňte její Text Vlastnost Zobrazit obrázek.
  3. Poklepejte na tlačítko otevřete jeho Klepněte na tlačítko událost v prohlížeči kód a vložte následující kód v tomto případě:
       try
       {
          pictureBox1.Image = new Bitmap(_imageStream);			       }
       catch 
       {
          MessageBox.Show("Error creating image!");
       }
    					
    Tento kód vytvoří novou instanci bitmapy, který je založen na zdroje proudu, která byla načtena v Zatížení událost formuláře.

  4. Přidat Textové pole řízení do formuláře.
  5. Přidat další Tlačítko ovládacího prvku ve formuláři a poté změňte její Text Vlastnost Získat Text.
  6. Poklepejte na tlačítko v editoru návrh otevřete Click_Event pro tlačítko a vložte následující kód události:
       try
       {
          if(_textStreamReader.Peek() != -1)
          {
             textBox1.Text = _textStreamReader.ReadLine();
          }
       }
       catch
       {
          MessageBox.Show("Error writing text!");
       }
    					
    Tento kód určuje, zda znaky ke čtení stále existovat v datovém proudu. V případě znaků řádku je pro čtení, do textového pole.

  7. Stisknutím klávesy F5 pro spuštění aplikace.

Kód

   using System;
   using System.Drawing;
   using System.Collections;
   using System.ComponentModel;
   using System.Windows.Forms;
   using System.Data;

   using System.IO;
   using System.Reflection;

   namespace MyNamespace
   {
      /// <summary>
      /// Summary description for Form1.
      /// </summary>
      public class Form1 : System.Windows.Forms.Form
      {
         private System.Windows.Forms.PictureBox pictureBox1;
         private System.Windows.Forms.TextBox textBox1;
         private System.Windows.Forms.Button button1;
         private System.Windows.Forms.Button button2;
         /// <summary>
         /// Required designer variable.
         /// </summary>
         private System.ComponentModel.Container components = null;

         public Form1()
         {
            // 
            // 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.pictureBox1 = new System.Windows.Forms.PictureBox();
            this.textBox1 = new System.Windows.Forms.TextBox();
            this.button1 = new System.Windows.Forms.Button();
            this.button2 = new System.Windows.Forms.Button();
            this.SuspendLayout();
            // 
            // pictureBox1
            // 
            this.pictureBox1.Location = new System.Drawing.Point(4, 8);
            this.pictureBox1.Name = "pictureBox1";
            this.pictureBox1.Size = new System.Drawing.Size(284, 192);
            this.pictureBox1.TabIndex = 0;
            this.pictureBox1.TabStop = false;
            // 
            // textBox1
            // 
            this.textBox1.Location = new System.Drawing.Point(92, 236);
            this.textBox1.Name = "textBox1";
            this.textBox1.Size = new System.Drawing.Size(192, 20);
            this.textBox1.TabIndex = 1;
            this.textBox1.Text = "textBox1";
            // 
            // button1
            // 
            this.button1.Location = new System.Drawing.Point(8, 208);
            this.button1.Name = "button1";
            this.button1.TabIndex = 2;
            this.button1.Text = "Show Image";
            this.button1.Click += new System.EventHandler(this.button1_Click);
            // 
            // button2
            // 
            this.button2.Location = new System.Drawing.Point(8, 236);
            this.button2.Name = "button2";
            this.button2.TabIndex = 3;
            this.button2.Text = "Get Text";
            this.button2.Click += new System.EventHandler(this.button2_Click);
            // 
            // Form1
            // 
            this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
            this.ClientSize = new System.Drawing.Size(292, 266);
            this.Controls.AddRange(new System.Windows.Forms.Control[]{
                                                                     this.button2,
                                                                     this.button1,
                                                                     this.textBox1,
                                                                     this.pictureBox1});

            this.Name = "Form1";
            this.Text = "Form1";
            this.Load += new System.EventHandler(this.Form1_Load);
            this.ResumeLayout(false);
         }
      #endregion

         Assembly _assembly;
         Stream _imageStream;
         StreamReader _textStreamReader;

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

         private void Form1_Load(object sender, System.EventArgs e)
         {
            try
            {
               _assembly = Assembly.GetExecutingAssembly();
               _imageStream = _assembly.GetManifestResourceStream("MyNamespace.MyImage.bmp");
              _textStreamReader = new StreamReader(_assembly.GetManifestResourceStream("MyNamespace.MyTextFile.txt"));
            }
            catch
            {
               MessageBox.Show("Error accessing resources!");
            }		
         }

         private void button1_Click(object sender, System.EventArgs e)
         {
            try
            {
               pictureBox1.Image = new Bitmap(_imageStream);
            }
            catch 
            {
               MessageBox.Show("Error creating image!");
            }
         }

         private void button2_Click(object sender, System.EventArgs e)
         {
            try
            {
               if(_textStreamReader.Peek() != -1)
               {
                  textBox1.Text = _textStreamReader.ReadLine();
               }
            }
            catch
            {
               MessageBox.Show("Error writing text!");
            }		
         }
      }
   }
				
Poznámka: V aplikaci Visual Studio 2005 nebo Visual Studio 2008, by měli měnit kód. Při vytváření projektu model Windows Forms, Visual C# přidá jeden formulář pro projekt ve výchozím nastavení. Tento formulář je pojmenován Formulář1. Dva soubory, které představují formuláře jsou pojmenovány Form1.cs a Form1.designer.cs. Píšete kód v Form1.cs. Soubor Designer.cs je, kde návrháři model Windows Forms zapíše kód, který implementuje všechny akce, provádí přidání ovládacích prvků. Další informace o nástroji Designer model Windows Forms v aplikaci Visual C# 2005 nebo Visual Studio 2008 navštivte následující Web společnosti Microsoft:
http://msdn2.microsoft.com/en-us/library/ms173077.aspx

Poradce při potížích

Protože názvy zdrojů rozlišují velká a malá písmena, ověřte, zda používáte správný pravopis a u zdrojů, které jsou přístupné. Čtení manifestu ověřte přesný pravopis zdroje dat můžete použít ILDASM.

Odkazy

Další informace naleznete na následujících webech Microsoft Developer Network (MSDN):
Obor názvů System.Reflection
http://msdn2.microsoft.com/en-us/library/System.Reflection (vs.71) .aspx

Sestavení třídy
http://msdn2.microsoft.com/en-us/library/System.Reflection.Assembly (vs.71) .aspx

Metoda Assembly.GetManifestResourceStream
http://msdn2.microsoft.com/en-us/library/System.Reflection.Assembly.getmanifestresourcestream (vs.71) .aspx

Vlastnosti

ID článku: 319292 - Poslední aktualizace: 19. května 2011 - Revize: 5.0
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Visual C# 2005 Express Edition
  • Microsoft Visual C# 2008 Express Edition
Klíčová slova: 
kbsweptvs2008 kbhowtomaster kbmt KB319292 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:319292

Dejte nám zpětnou vazbu

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com