Τρόπος ενσωμάτωσης και πρόσβαση σε πόρους, χρησιμοποιώντας το Visual C#

Μεταφράσεις άρθρων Μεταφράσεις άρθρων
Αναγν. άρθρου: 319292 - Δείτε τα προϊόντα στα οποία αναφέρεται το συγκεκριμένο άρθρο.
Ανάπτυξη όλων | Σύμπτυξη όλων

Σε αυτήν τη σελίδα

Περίληψη

Αυτό το άρθρο βήμα προς βήμα περιγράφει τον τρόπο χρήσης της Visual C# για να ενσωματώσετε πόρων ως μέρος της συνέλευσης, και στη συνέχεια πρόσβαση στους πόρους κατά το χρόνο εκτέλεσης.

Επισκόπηση

Το .NET Framework να ενσωματώσετε αρχεία ως μέρος της μια μεταγλωττισμένη συγκρότηση. Τα αρχεία αυτά είναι γνωστά ως ενσωματωμένο πόρους. Αυτοί οι πόροι είναι εντελώς ξεχωριστά από τα .resources και .resx αρχεία που σχετίζονται με τη συγκρότηση. Μπορείτε να αποκτήσετε πρόσβαση σε αυτούς τους πόρους κατά το χρόνο εκτέλεσης, μέσω της κλάσης συγκρότησης του χώρου ονομάτων System.Reflection .

Ένα μεγάλο πλεονέκτημα του ενσωμάτωση πόρους για τη διακήρυξη είναι ότι επειδή τα αρχεία είναι μέρος του σας μεταγλωττισμένη συγκρότηση, ο χρήστης δεν είναι δυνατό να διαγράψετε ή κατά λάθος χάσετε τα αρχεία που είναι σημαντικές για την εφαρμογή σας, το οποίο, σε ορισμένες περιπτώσεις, μπορεί να εμποδίσει την εκτέλεση του προγράμματος. Ένας περιορισμός αυτής της προσέγγισης είναι ότι δεν μπορείτε να αποθηκεύσετε τις αλλαγές σε αυτό το αρχείο στη συγκρότηση χωρίς νέα μεταγλώττιση του προγράμματος. Για το λόγο αυτό, περιλαμβάνει μόνο αρχεία που δεν θα αλλάξει κατά τη διάρκεια ζωής της εφαρμογής σας με έναν ενσωματωμένο πόρο.

Βήμα προς βήμα επίδειξης

Για να προσθέσετε το ενσωματωμένο πόρους στο έργο σας, πρέπει πρώτα να προσθέσετε τα αρχεία ως μέρος του έργου σας. Αφού προσθέσετε τα αρχεία στο έργο σας, μπορείτε να έχετε πρόσβαση και να εμφανίζει τους πόρους μέχρι το χώρο ονομάτων System.Reflection .

Προσθήκη ενσωματωμένου πόρων

Για να προσθέσετε ένα αρχείο κειμένου και ένα αρχείο εικόνας στο έργο σας ως ενσωματωμένο πόρους, ακολουθήστε τα εξής βήματα:
  1. Δημιουργήστε ένα νέο έργο εφαρμογών των Windows για αυτήν την επίδειξη. Η φόρμα αυτή χρησιμοποιείται για να εμφανίσετε τους πόρους που είναι προσπελάσιμα από τη συγκρότηση εκτέλεσης κατά το χρόνο εκτέλεσης.
  2. Κάντε δεξιό κλικ στο όνομα του έργου σας, κάντε κλικ στο κουμπί Προσθήκηκαι, στη συνέχεια, κάντε κλικ στην επιλογή Προσθήκη νέου στοιχείου.
  3. Στο πλαίσιο διαλόγου " Νέο στοιχείο ", επιλέξτε το Αρχείο κειμένου από το μενού και ονομάστε το αρχείο MyTextFile.txt. Όταν το αρχείο ανοίγει με το ενσωματωμένο περιβάλλον ανάπτυξης (IDE), προσθέστε κάποιο κείμενο και, στη συνέχεια, κλείστε το αρχείο.
  4. Επαναλάβετε τα βήματα 1 και 2 για να προσθέσετε μια εικόνα bitmap στο έργο σας, αλλά αντί να επιλέξετε το Αρχείο κειμένου ως το νέο τύπο στοιχείου, επιλέξτε Αρχείο Bitmap, και στη συνέχεια, αλλάξτε το όνομα αρχείου για να MyImage.bmp. Όταν ανοίξει η νέα εικόνα στο IDE, σχεδιάστε κάτι στην εικόνα και, στη συνέχεια, κλείστε το αρχείο.
  5. Κάντε δεξιό κλικ στο αρχείο κειμένου ή το bitmap, και στη συνέχεια επιλέξτε την εντολή Ιδιότητες.
  6. Στο πλαίσιο διαλόγου " Ιδιότητες ", εντοπίστε την ιδιότητα Action Δόμηση . Από προεπιλογή, αυτή η ιδιότητα ορίζεται σε περιεχομένου. Κάντε κλικ στην ιδιότητα και να αλλάξετε την ιδιότητα Action Δόμησηενσωματωμένο πόρο.
  7. Επαναλάβετε τα βήματα 4 και 5 για το άλλο αρχείο.
Την επόμενη φορά που θα δημιουργήσετε το έργο, το πρόγραμμα μεταγλώττισης προσθέτει αυτά τα αρχεία της συγκρότησης. Το πρόγραμμα μεταγλώττισης προσθέτει το χώρο ονομάτων ρίζας του έργου στο όνομα του πόρου, όταν περιλαμβάνεται στο έργο. Για παράδειγμα, εάν ο ριζικός χώρος ονομάτων του έργου σας είναι MyNamespace, τους πόρους που ονομάζονται MyNamespace.MyTextFile.txt και MyNamespace.MyImage.bmp.

ΣΗΜΕΊΩΣΗ: τα ονόματα των αρχείων πόρων διάκριση πεζών-κεφαλαίων. Όταν αποκτάτε πρόσβαση στους πόρους, πρέπει να χρησιμοποιήσετε το ακριβές και υπόθεσης του ονόματος αρχείου. Εάν δεν χρησιμοποιείτε το ακριβές και υπόθεσης του ονόματος αρχείου, η κλήση της μεθόδου πρόσβασης το ManifestResourceStream επιστρέφει τίποτακαι το σύστημα δεν ενεργοποιεί μια εξαίρεση.

ΣΗΜΕΊΩΣΗ: Εάν θέλετε να επαληθεύσετε τα ονόματα των πόρων, μπορείτε να χρησιμοποιήσετε το το Microsoft ενδιάμεση γλώσσα αποκωδικοποιητής (ILDASM) για να προβάλετε τα δεδομένα δήλωσης, τα οποία παραθέτει τους πόρους που περιλαμβάνονται.

Πρόσβαση σε πόρους

Για να αποκτήσετε πρόσβαση στους πόρους που έχουν ενσωματωμένα στη διακήρυξη της συγκρότησης, εισαγάγετε το System.IO και τα πεδία ονομάτων System.Reflection , ως εξής:
   using System.IO;
   using System.Reflection;
				
Ο χώρος ονομάτων System.IO παρέχει τον ορισμό μιας ροής και το χώρο ονομάτων System.Reflection Καθορίζει την κλάση συγκρότησης που παρέχει μεθόδους για να αποκτήσετε πρόσβαση στους πόρους που είναι ενσωματωμένα σε της συγκρότησης.

Όταν δηλώνετε τα ακόλουθα στην περιοχή δήλωση γενικών στοιχείων, οι πόροι από τη συγκρότηση διαβάζονται όταν φορτώνεται η φόρμα:
   Assembly _assembly;
   Stream _imageStream;
   StreamReader _textStreamReader;
				
ΣΗΜΕΊΩΣΗ: για να αποκτήσετε πρόσβαση στο συμβάν φόρτωσης για τη φόρμα στο πρόγραμμα επεξεργασίας κώδικα, κάντε διπλό κλικ στο πρόγραμμα επεξεργασίας σχεδίασης φόρμας.

Για να διαβάσετε τον πόρο από τη συγκρότηση που εκτελεί τον κώδικα, πρέπει να αποκτήσετε μια παρουσία αυτής της συγκρότησης. Για να το κάνετε αυτό, χρησιμοποιήστε τη μέθοδο GetExecutingAssembly της συνέλευσης, ως εξής:
   _assembly = Assembly.GetExecutingAssembly();
				
Ανάγνωση των πληροφοριών από τον πόρο σε μια ροή πραγματοποιείται με μια κλήση μεθόδου σε GetManifestResourceStream. Η παράμετρος που μεταβιβάζεται σε αυτήν τη μέθοδο είναι το όνομα του πόρου που πρόκειται να είναι δυνατή η πρόσβαση. Οι δύο πόροι στη συνέχεια διαβάστε για τις αντίστοιχες ροές καθώς εκτελείται το συμβάν φόρτωσης της φόρμας.
   _imageStream = _assembly.GetManifestResourceStream("MyNameSpace.MyImage.bmp");
   _textStreamReader = new StreamReader(_assembly.GetManifestResourceStream("MyNameSpace.MyTextFile.txt"));
				
Μοιάζει με το ακόλουθο κώδικα στο συμβάν φόρτωσης για τη φόρμα:
   try
   {
      _assembly = Assembly.GetExecutingAssembly();
      _imageStream = _assembly.GetManifestResourceStream("MyNamespace.MyImage.bmp");
      _textStreamReader = new StreamReader(_assembly.GetManifestResourceStream("MyNamespace.MyTextFile.txt"));
   }
   catch
   {
      MessageBox.Show("Error accessing resources!");
   }
				
Η πρόταση Try-Catch , γνωστή ως δομημένη λάθος χειρισμό στο .NET, χρησιμοποιείται για να εντοπίσετε τυχόν λάθη που ενδέχεται να προκύψει, ενώ η παρουσία της κλάσης συγκρότησης αποκτά πρόσβαση στους πόρους.

Εμφάνιση πόρων

Αυτό το παράδειγμα χρησιμοποιεί δύο κουμπιά για να εμφανίσετε το ενσωματωμένο πόρους. Όταν κάνετε κλικ στο πρώτο κουμπί, μια εικόνα bitmap που βασίζεται στον πόρο που διαβάζεται από τη συγκρότηση δημιουργείται και εμφανίζεται στο PictureBox στοιχείο ελέγχου της φόρμας. Το δεύτερο κουμπί διαβάζει από έναν πόρο, κείμενο και εμφανίζει το κείμενο σε ένα πλαίσιο κειμένου.

Για να εμφανίσετε το ενσωματωμένο πόρους, ακολουθήστε τα εξής βήματα:
  1. Προσθήκη ενός στοιχείου ελέγχου PictureBox στη φόρμα.
  2. Προσθέστε ένα νέο στοιχείο ελέγχου κουμπιού στη φόρμα και, στη συνέχεια αλλάξτε την ιδιότητα Text σε Εμφάνιση εικόνας.
  3. Κάντε διπλό κλικ στο κουμπί για να ανοίξετε το συμβάν , κάντε κλικ στο πρόγραμμα προβολής κώδικα και, στη συνέχεια, επικολλήστε τον παρακάτω κώδικα στην περίπτωση αυτή:
       try
       {
          pictureBox1.Image = new Bitmap(_imageStream);			       }
       catch 
       {
          MessageBox.Show("Error creating image!");
       }
    					
    Αυτός ο κώδικας δημιουργεί μια νέα παρουσία του bitmap που βασίζεται στη ροή πόρων που διαβάστηκε στο συμβάν φόρτωσης της φόρμας.

  4. Προσθέστε ένα στοιχείο ελέγχου πλαισίου κειμένου στη φόρμα.
  5. Προσθέστε ένα άλλο στοιχείο ελέγχου κουμπιού στη φόρμα και, στη συνέχεια, αλλάξτε την ιδιότητα κειμένου σε Κείμενο που εμφανίζεται.
  6. Κάντε διπλό κλικ στο κουμπί με το πρόγραμμα επεξεργασίας σχεδίασης για να ανοίξετε το Click_Event για το κουμπί και, στη συνέχεια, επικολλήστε τον ακόλουθο κώδικα στο συμβάν:
       try
       {
          if(_textStreamReader.Peek() != -1)
          {
             textBox1.Text = _textStreamReader.ReadLine();
          }
       }
       catch
       {
          MessageBox.Show("Error writing text!");
       }
    					
    Αυτός ο κωδικός προσδιορίζει αν χαρακτήρες να διαβαστεί εξακολουθούν να υπάρχουν στη ροή. Εάν δεν βρεθεί χαρακτήρες, μια γραμμή είναι για ανάγνωση στο πλαίσιο κειμένου.

  7. Πατήστε F5 για να εκτελέσετε την εφαρμογή.

Πλήρης κώδικας

   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!");
            }		
         }
      }
   }
				
Σημείωση Πρέπει να αλλάξει τον κωδικό στο Visual Studio 2005 ή το Visual Studio 2008. Όταν δημιουργείτε ένα έργο Windows Forms, Visual C# προσθέτει μία φόρμα για το έργο από προεπιλογή. Αυτή η φόρμα ονομάζεται Form1. Τα δύο αρχεία που αντιπροσωπεύουν τη φόρμα ονομάζονται Form1.cs και Form1.designer.cs. Συντάξτε τον κώδικά σας στο Form1.cs. Το αρχείο Designer.cs είναι όπου ο σχεδιαστής των Windows εγγράφει τον κώδικα που υλοποιεί όλες τις ενέργειες που εκτελούνται με την προσθήκη στοιχείων ελέγχου. Για περισσότερες πληροφορίες σχετικά με τη σχεδίαση φορμών των Windows στο Visual C# 2005 ή το Visual Studio 2008, επισκεφθείτε την ακόλουθη τοποθεσία της Microsoft στο Web:
http://msdn2.Microsoft.com/en-us/library/ms173077.aspx

Αντιμετώπιση προβλημάτων

Επειδή τα ονόματα πόρων διάκριση πεζών-κεφαλαίων, βεβαιωθείτε ότι χρησιμοποιείτε τη σωστή ορθογραφία και υπόθεση των πόρων που είναι προσπελάσιμα. Μπορείτε να χρησιμοποιήσετε το ILDASM για να διαβάσετε τα δεδομένα δήλωσης για να επαληθεύσετε το ακριβές των πόρων.

Αναφορές

Για περισσότερες πληροφορίες, ανατρέξτε στις ακόλουθες τοποθεσίες της Microsoft Developer Network (MSDN) στο Web:
System.Reflection χώρου ονομάτων
.aspx http://msdn2.Microsoft.com/en-us/library/System.reflection (vs.71)

Κλάση συγκρότησης
.aspx http://msdn2.Microsoft.com/en-us/library/System.reflection.assembly (vs.71)

Η μέθοδος Assembly.GetManifestResourceStream
.aspx http://msdn2.Microsoft.com/en-us/library/System.reflection.Assembly.getmanifestresourcestream (vs.71)

Ιδιότητες

Αναγν. άρθρου: 319292 - Τελευταία αναθεώρηση: Παρασκευή, 29 Μαρτίου 2013 - Αναθεώρηση: 6.0
Οι πληροφορίες σε αυτό το άρθρο ισχύουν για:
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Visual C# 2005 Express Edition
  • Microsoft Visual C# 2008 Express Edition
Λέξεις-κλειδιά: 
kbsweptvs2008 kbhowtomaster kbmt KB319292 KbMtel
Μηχανικά μεταφρασμένο
ΣΗΜΑΝΤΙΚΟ: Αυτό το άρθρο είναι προϊόν λογισμικού μηχανικής μετάφρασης της Microsoft και όχι ανθρώπινης μετάφρασης. Η Microsoft σάς προσφέρει άρθρα που είναι προϊόντα ανθρώπινης αλλά και μηχανικής μετάφρασης έτσι ώστε να έχετε πρόσβαση σε όλα τα άρθρα της Γνωσιακής Βάσης μας στη δική σας γλώσσα. Ωστόσο, ένα άρθρο που έχει προκύψει από μηχανική μετάφραση δεν είναι πάντα άριστης ποιότητας. Ενδέχεται να περιέχει λεξιλογικά, συντακτικά ή γραμματικά λάθη, όπως ακριβώς τα λάθη που θα έκανε ένας μη φυσικός ομιλητής επιχειρώντας να μιλήσει τη γλώσσα σας. Η Microsoft δεν φέρει καμία ευθύνη για τυχόν ανακρίβειες, σφάλματα ή ζημίες που προκύψουν λόγω τυχόν παρερμηνειών στη μετάφραση του περιεχομένου ή χρήσης του από τους πελάτες της. Επίσης, η Microsoft πραγματοποιεί συχνά ενημερώσεις στο λογισμικό μηχανικής μετάφρασης.
Η αγγλική έκδοση αυτού του άρθρου είναι η ακόλουθη: 319292

Αποστολή σχολίων

 

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