كيفية تضمين الوصول إلى الموارد باستخدام Visual C#

هام: تمت ترجمة هذا المقال باستخدام برنامج ترجمة آلية لشركة مايكروسوفت بدلاً من الاستعانة بمترجم بشري. تقدم شركة مايكروسوفت كلاً من المقالات المترجمة بواسطة المترجمين البشر والمقالات المترجمة آليًا وبالتالي ستتمكن من الوصول إلى كل المقالات الموجودة في قاعدة المعرفة الخاصة بنا وباللغة الخاصة بك. بالرغم من ذلك، فإن المقالة المترجمة آليًا لا تكون دقيقة دائمًا وقد تحتوي على أخطاء إملائية أو لغوية أو نحوية، مثل تلك الأخطاء الصادرة عن متحدث أجنبي عندما يتحدث بلغتك. لا تتحمل شركة مايكروسوفت مسئولية عدم الدقة أو الأخطاء أو الضرر الناتج عن أية أخطاء في ترجمة المحتوى أو استخدامه من قبل عملائنا. تعمل شركة مايكروسوفت باستمرار على ترقية برنامج الترجمة الآلية

اضغط هنا لرابط المقالة باللغة الانجليزية319292
للحصول على إصدار Microsoft Visual Basic .NET من هذه المقالة، راجع 319291.

تشير هذه المقالة إلى مساحات أسماء Microsoft .NET Framework فئة مكتبة التالية:
  • System.Reflection
  • System.IO

في هذه المهمة

الموجز
توضح هذه المقالة خطوة بخطوة حول كيفية استخدام Visual C# تضمين الموارد كجزء من التجميع و ثم الوصول إلى الموارد في وقت التشغيل.

back to the top

نظرة عامة حول

يمكن لـ .NET Framework تغلف الملفات كجزء من التجميع المترجمة. تُعرف هذه الملفات إلى الموارد المضمنة. هذه الموارد منفصلة تمامًا من الملفات .resources و .resx المقترنة مع التجميع. يمكنك الوصول إلى هذه الموارد في وقت التشغيل خلال الفئة التجميع من مساحة الاسم System.Reflection.

فائدة رئيسية من تضمين الموارد بيان هو أن لأن الملفات جزءاً من تجميع المترجمة المستخدم لا بطريق الخطأ بحذف أو misplace الملفات الحرجة التطبيق، التي في بعض الحالات قد منع تنفيذ البرنامج. تحديد واحد من هذا الأسلوب أنه لا يمكنك حفظ أية تغييرات على هذا الملف إلى التجميع بدون ترجمة البرنامج. وبسبب هذا، فقط تضمين الملفات لن يتم تغيير أثناء عمر التطبيق الخاص بك كمورد مضمنة.

back to the top

العرض التوضيحي خطوة بخطوة

لإضافة الموارد المضمنة إلى المشروع، يجب أولاً إضافة الملفات كجزء من المشروع. بعد إضافة الملفات إلى المشروع يمكن الوصول إلى المصادر من خلال مساحة الاسم System.Reflection وعرض.

back to the top

إضافة موارد مضمّنة

لإضافة ملف نصي أو ملف صورة إلى المشروع كموارد المضمنة اتبع الخطوات التالية:
  1. إنشاء مشروع تطبيق Windows جديد هذا العرض التوضيحي. يستخدم هذا النموذج في عرض الموارد التي يتم الوصول إليها من تنفيذ التجميع أثناء وقت التشغيل.
  2. انقر بزر الماوس الأيمن فوق اسم المشروع انقر فوق إضافة ثم انقر فوق إضافة عنصر جديد.
  3. في مربع الحوار "عنصر جديد" ، حدد Text File من القائمة ثم قم بتسمية الملف MyTextFile.txt. عند فتح الملف في بيئة التطوير المتكاملة (IDE) إضافة بعض النص ثم قم بإغلاق الملف.
  4. كرر الخطوتين 1 و 2 لإضافة صورة إلى المشروع ولكن بدلاً من تحديد ملف نصي نوع عنصر جديد ، حدد ملف صورة نقطية ثم قم بتغيير اسم الملف إلى MyImage.bmp. عند فتح الصورة الجديدة في IDE رسم شيء ما على الصورة ثم قم بإغلاق الملف.
  5. انقر بزر الماوس الأيمن فوق الملف النصي أو الصورة النقطية ثم حدد خصائص.
  6. في مربع الحوار "خصائص" ، حدد موقع الخاصية "إجراء إنشاء". افتراضياً، يتم تعيين هذه الخاصية إلى المحتوى. انقر فوق الخاصية ثم تغيير الخاصية إنشاء إجراء إلى الموارد المضمنة.
  7. كرر الخطوتين 4 و5 ملف آخر.
في المرة التالية التي تم إنشاء المشروع أو المحول البرمجي يضيف هذه الملفات إلى التجميع الخاص بك. يضيف المحول البرمجي مساحة اسم الجذر المشروع إلى اسم المورد عندما يتم تضمينه في المشروع. على سبيل المثال، إذا كانت مساحة الاسم الجذر من المشروع MyNamespace ، يتم تسمية الموارد MyNamespace.MyTextFile.txt و MyNamespace.MyImage.bmp.

ملاحظة: أسماء الملفات المورد حساسة لحالة الأحرف. عند الوصول إلى الموارد التي يجب عليك استخدام بنفس الهجاء وحالة اسم الملف. لم إذا لم تكن تستخدم بنفس الهجاء وإرجاع الحالة اسم الملف استدعاء الأسلوب الوصول ManifestResourceStreamNothing ونظام بإصدار استثناء.

ملاحظة: إذا كنت تريد التحقق من أسماء الموارد يمكنك استخدام في Microsoft متوسط اللغة Disassembler (ILDASM) لعرض البيانات بيان التي تسرد موارد تضمين.

back to the top

موارد الوصول

للوصول إلى الموارد التي تم تضمينها في بيان التجميع الخاص بك, استيراد System.IO و مساحات الأسماء System.Reflection كما يلي:
   using System.IO;   using System.Reflection;				
مساحة الاسم System.IO يوفر تعريف دفق وتقوم بتعريف مساحة الاسم System.Reflection الفئة التجميع الذي يوفر أساليب الوصول إلى موارد المضمنة في التجميع الخاص بك.

تتم قراءة الموارد من التجمع عندما يتم تحميل النموذج عندما تقوم بتعريف التالية في منطقة تعريف عام:
   Assembly _assembly;   Stream _imageStream;   StreamReader _textStreamReader;				
ملاحظة: إلى الوصول الحدث Load النموذج في "محرر التعليمات البرمجية" ، انقر نقراً مزدوجاً فوق النموذج في "محرر التصميم.

لقراءة المورد من التجميع الذي يتم تنفيذ التعليمات البرمجية الحالي يجب الحصول على مثيل من هذا التجميع. للقيام بذلك، استخدم الطريقة GetExecutingAssembly التجميع ، كما يلي:
   _assembly = Assembly.GetExecutingAssembly();				
قراءة المعلومات من المورد إلى دفق يتم إجراؤها بواسطة استدعاء أسلوب GetManifestResourceStream. المعلمة التي يتم تمريرها إلى هذا الأسلوب هو اسم المورد الذي يتم الوصول إليه. يتم ثم قراءة الموارد جهازي تدفقات المقابلة الخاصة بهم أثناء تنفيذ الحدث Load النموذج.
   _imageStream = _assembly.GetManifestResourceStream("MyNameSpace.MyImage.bmp");   _textStreamReader = new StreamReader(_assembly.GetManifestResourceStream("MyNameSpace.MyTextFile.txt"));				
لما يلي في التعليمات البرمجية الموجودة في الحدث Load للنموذج:
   try   {      _assembly = Assembly.GetExecutingAssembly();      _imageStream = _assembly.GetManifestResourceStream("MyNamespace.MyImage.bmp");      _textStreamReader = new StreamReader(_assembly.GetManifestResourceStream("MyNamespace.MyTextFile.txt"));   }   catch   {      MessageBox.Show("Error accessing resources!");   }				
يتم استخدام عبارة حاول التقاط يعرف معالجة الخطأ مصنفة في .NET ، لجذب أية أخطاء قد يكون حدث أثناء مثيلاً لفئة التجميع بالوصول إلى الموارد.

back to the top

عرض الموارد

يستخدم هذا المثال زرين لعرض الموارد المضمنة. عند النقر فوق الزر الأول يتم إنشاء صورة تستند إلى مورد مقروءة من التجميع وعرضها في عنصر التحكم PictureBox النموذج. الزر الثاني من القراءة من أحد موارد نص ويعرض النص في مربع نص.

لعرض الموارد المضمنة اتبع الخطوات التالية:
  1. إضافة عنصر تحكم PictureBox إلى النموذج.
  2. إضافة عنصر تحكم زر جديد إلى النموذج ثم قم بتغيير الخاصية Text الخاص به إلى إظهار الصورة.
  3. انقر نقراً مزدوجاً فوق زر فتح الحدث الخاص به انقر في عارض التعليمات البرمجية ثم قم بلصق التعليمة البرمجية التالية في هذا الحدث:
       try   {      pictureBox1.Image = new Bitmap(_imageStream);			       }   catch    {      MessageBox.Show("Error creating image!");   }					
    التعليمات البرمجية هذا بإنشاء مثيل جديد من الصورة النقطية التي تستند إلى دفق المورد التي تمت قراءتها في الحدث Load النموذج.

  4. إضافة عنصر تحكم مربع نص إلى النموذج.
  5. إضافة عنصر تحكم زر آخر إلى النموذج ثم قم بتغيير الخاصية Text الخاص به إلى إحضار نص.
  6. انقر نقراً مزدوجاً فوق الزر في محرر تصميم لفتح Click_Event لزر ثم قم بلصق التعليمة البرمجية التالية في الحدث:
       try   {      if(_textStreamReader.Peek() != -1)      {         textBox1.Text = _textStreamReader.ReadLine();      }   }   catch   {      MessageBox.Show("Error writing text!");   }					
    هذه التعليمات البرمجية يحدد ما إذا كانت الأحرف يمكن قراءة لازالت موجودة في الدفق. إذا تم العثور على أحرف خط للقراءة إلى مربع النص.

  7. اضغط F5 لتشغيل التطبيق.
back to the top

رمز كامل

   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 أو في 2008 Visual Studio. عند إنشاء مشروع Windows نماذج Visual C# إضافة نموذج إلى المشروع بشكل افتراضي. يدعى هذا النموذج Form1. يتم تسمية الملفين التي تمثل النموذج Form1.cs و Form1.designer.cs. كتابة التعليمات البرمجية في Form1.cs. يعد الملف Designer.cs حيث يكتب & مصمم نماذج Windows التعليمات البرمجية التي تقوم بتنفيذ كافة الإجراءات تنفيذ عن طريق إضافة عناصر تحكم. للحصول على مزيد من المعلومات حول مصمم نماذج Windows في Visual C# 2005 أو في 2008 Visual Studio قم بزيارة موقع Microsoft التالي على الويب:back to the top

استكشاف الأخطاء وإصلاحها

لأن تتحسس أسماء الموارد "، تحقق من أنك تستخدم الإملاء الصحيح وحالة الموارد التي يتم الوصول إليها. يمكنك استخدام ILDASM قراءة بيانات بيان للتحقق من بنفس الهجاء الموارد.

back to the top
مراجع
لمزيد من المعلومات، راجع مواقع شبكة مطوري Microsoft (MSDN) التالي على الويب: back to the top

تحذير: تمت ترجمة هذه المقالة تلقائيًا

خصائص

رقم الموضوع: 319292 - آخر مراجعة: 07/15/2008 03:11:46 - المراجعة: 3.1

Microsoft Visual C# .NET 2002 Standard Edition, Microsoft Visual C# 2005 Express Edition, Microsoft Visual C# 2008 Express Edition

  • kbmt kbsweptvs2008 kbhowtomaster KB319292 KbMtar
تعليقات