欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#使用Resources資源文件

 更新時(shí)間:2022年06月14日 14:27:06   作者:springsnow  
這篇文章介紹了C#使用Resources資源文件的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

一、創(chuàng)建資源文件

可以將字符串、圖像或?qū)ο髷?shù)據(jù)等資源包含在資源文件中,方便應(yīng)用程序使用。

創(chuàng)建資源文件的方法:

1、手動(dòng)或使用IDE工具自動(dòng)生成XML 資源 (.resx) 文件。(推薦)

創(chuàng)建一個(gè)包含字符串、圖像或?qū)ο髷?shù)據(jù)的 XML 資源 (.resx) 文件。

使用 Visual Studio 創(chuàng)建一個(gè)資源文件并將其包含在項(xiàng)目中。

Visual Studio 提供一個(gè)資源編輯器,借助該編輯器,可添加、刪除和修改資源。 編譯時(shí),資源文件會(huì)自動(dòng)轉(zhuǎn)換成二進(jìn)制 .resources 文件,并嵌入應(yīng)用程序程序集或附屬程序集中。

注意:內(nèi)部使用資源文件生成器 (Resgen.exe) 將文本文件轉(zhuǎn)換成二進(jìn)制資源 (.resources) 文件。 然后使用語(yǔ)言編譯器將這個(gè)二進(jìn)制資源文件嵌入可執(zhí)行應(yīng)用程序或應(yīng)用程序庫(kù),或者使用程序集鏈接器 (Al.exe) 將這個(gè)二進(jìn)制資源文件嵌入附屬程序集。

2、以編程方式創(chuàng)建一個(gè) XML 資源 (.resx) 文件。 使用ResXResourceWriter類

可以創(chuàng)建一個(gè) .resx 文件、枚舉其資源并按名稱檢索特定資源。

ResXResourceWriter rw = new ResXResourceWriter("Demo.rex");
rw.AddResource("Logo", Image.FromFile("logo.jpg");
rw.AddResource("Title", "Proce c#");
rw.Generate();
rw.Close();

二、使用ResourceManager讀取項(xiàng)目中資源文件

資源文件調(diào)用方法 
(1).txt 文件:不可以直接調(diào)用,得先將其轉(zhuǎn)換成 .resources 文件才能使用。 
(2).resx 文件:可以用 ResXResourceReader 來(lái)做讀取,但是這種方法不直觀,不推薦直接調(diào)用 .resx 文件。正確的方法是將其轉(zhuǎn)換成 .resources 文件,然后用 ResourceManager 作讀取工作。 
注意如果是在 VS.NET 中添加的 .resx 文件,那么它們自動(dòng)被設(shè)為 Embedded Resource,轉(zhuǎn)成 .resources 文件后被嵌入到 Assembly 中。 

(3).resources 文件分成兩種情況: 

  • 1、被嵌入或編譯成 Satellite Assembly:使用ResourceManager來(lái)獲得在 Assembly 中的資源。 
  • 2、單獨(dú)文件,沒(méi)被編譯或嵌入到Assembly:使用ResourceManager.CreateFileBasedResourceManager來(lái)獲得資源集(ResourceSet)。

在新建的Windows項(xiàng)目中,一般自動(dòng)生成兩個(gè)資源文件:Form1.resx和Resources.resx。其中,F(xiàn)orm1.resx附屬Form1窗體,Resources.resx在項(xiàng)目Properties子文件夾下。

下面我們看看讀取項(xiàng)目中資源文件

1、強(qiáng)類型讀取項(xiàng)目中resx資源文件。

1、創(chuàng)建一個(gè)項(xiàng)目的默認(rèn)資源文件。

2、在項(xiàng)目“Properties”目錄下,可以看到Resources.resx。

3、添加相關(guān)的資源。

4、可以看到系統(tǒng)自動(dòng)生成的強(qiáng)類型類。

使用強(qiáng)類型可直接使用類

logo.Image = ZS.MouldManagement.Properties.Resources._0

不僅在Properties文件夾下可以建立資源文件,也可以在任何地方創(chuàng)建資源文件。在建立名稱為MyResource資源文件的同時(shí),設(shè)計(jì)器會(huì)自動(dòng)生成兩個(gè)文件:MyResource.resx和MyResource.Designer.cs。其中后一個(gè)文件就包裝了設(shè)計(jì)器自動(dòng)生成的代碼,以方便對(duì)資源文件的強(qiáng)類型訪問(wèn)。

強(qiáng)類型訪問(wèn)代碼:

ZS.MouldManagement.Mould._333

2、使用代碼讀取項(xiàng)目中不同文化的resx資源文件

ResourceManager 可以根據(jù)不同的 UICulture 設(shè)置返回不同的本地資源,我們只需知道調(diào)用資源用到它就可以了。

Winform使用資源文件(ZS.MouldManagement.resx;ZS.MouldManagement.en-us.rex等等)

//多語(yǔ)言
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-us");
Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-us");

Assembly asm = Assembly.GetExecutingAssembly();
ResourceManager rm = new ResourceManager("ZS.MouldManagement.Properties.Resources", asm);
//ZS.MouldManagement是你程序的命名空間,ZS.MouldManagement.Properties 是資源類Resources的命名空間, 資源文件名稱不帶擴(kuò)展名
this.logo.Image = (Image)rm.GetObject("Logo");//Get**方法具有重載方法,第二個(gè)參數(shù)為CultureInfo對(duì)象
this.Title.Text = rm.GetString("Title");    //資源文件名稱不帶擴(kuò)展名

三、Windows項(xiàng)目中的窗體資源文件

因?yàn)閷?duì)Form1.resx的訪問(wèn)需要構(gòu)造Syste.Resources.ResourceManager對(duì)象,而訪問(wèn)Resources.resx里的資源可以直接使用Properties.Resources.resName(resName是你添加的資源的名稱)。 
只有向窗體上添加圖標(biāo)、圖像等資源后

會(huì)在窗體設(shè)計(jì)器Form1.Designer.cs自動(dòng)生成下面的代碼

ComponentResourceManager resources = new ComponentResourceManager(typeof(Form1));//創(chuàng)建ResourceManager對(duì)象
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));//根據(jù)資源的名稱獲取字符串資源
  
this.Item1.Image = global::ZS.MouldManagement.Properties.Resources._0; //訪問(wèn)項(xiàng)目中的資源

從代碼可以看出,c#將窗體的圖標(biāo)文件作為資源進(jìn)行保存了起來(lái),然后利用ComponentResourceManager來(lái)獲取這些資源。

它和ResourceManager用法一樣,System.ComponentModel.ComponentResourceManager繼承自Syste.Resources.ResourceManager。

使用ComponentResourceManager類進(jìn)行界面多語(yǔ)言切換

Thread.CurrentThread.CurrentUICulture = new CultureInfo("zh-CN");

ComponentResourceManager resources = new ComponentResourceManager(typeof(Form1));
resources.ApplyResources(this, "$this");
AppLang(form, resources);

#region AppLang for control
/// <summary>
/// 遍歷窗體所有控件,針對(duì)其設(shè)置當(dāng)前界面語(yǔ)言
/// </summary>
/// <param name="control"></param>
/// <param name="resources"></param>
private static void AppLang(Control control, System.ComponentModel.ComponentResourceManager resources)
{
    if (control is MenuStrip)
    {
        resources.ApplyResources(control, control.Name);
        MenuStrip ms = (MenuStrip)control;
        if (ms.Items.Count > 0)
        {
            foreach (ToolStripMenuItem c in ms.Items)
            {
                AppLang(c, resources);
            }
        }
    }

    foreach (Control c in control.Controls)
    {
        resources.ApplyResources(c, c.Name);
        AppLang(c, resources);
    }
}
#endregion

#region AppLang for menuitem
/// <summary>
/// 遍歷菜單
/// </summary>
/// <param name="item"></param>
/// <param name="resources"></param>
private static void AppLang(ToolStripMenuItem item, System.ComponentModel.ComponentResourceManager resources)
{
    if (item is ToolStripMenuItem)
    {
        resources.ApplyResources(item, item.Name);
        ToolStripMenuItem tsmi = (ToolStripMenuItem)item;
        if (tsmi.DropDownItems.Count > 0)
        {
            foreach (ToolStripMenuItem c in tsmi.DropDownItems)
            {
                AppLang(c, resources);
            }
        }
    }
}
#endregion

四、使用Assembly.GetManifestResourceStream()從此程序集加載指定的文件。

當(dāng)直接嵌入一資源時(shí),也就是說(shuō),不通過(guò)一個(gè)資源文件而直接將一資源(比如圖片)嵌入到 Assembly 中。這可以在 VS.NET 中通過(guò)設(shè)置一文件的 Build 屬性為“嵌入的資源” 實(shí)現(xiàn)。

在這種情況下 ResourceManager 就沒(méi)有用了,因?yàn)樗荒塬@取 .resources 資源文件。那么如何調(diào)用這類的資源呢?我們只要了解一些 System.Reflection.Assembly 這個(gè)類中的一些函數(shù)就可以了。

有三個(gè)相關(guān)函數(shù),不過(guò)我們只需要 Assembly.GetManifestResourceStream 這個(gè)函數(shù)。這個(gè)函數(shù)將一嵌入到 Assembly 中的資源以 stream 的方式返回,而我們可以將這個(gè) stream 轉(zhuǎn)成在 .NET 中可用的對(duì)象。

比如,如果嵌入資源是一圖片,那么我們可以利用 new Bitmap(Stream) 這個(gè)構(gòu)造方法獲得這個(gè)圖片資源的 Bitmap 對(duì)象。

1、將本地要加入的資源文本(視頻,圖片,文本或其它)加入項(xiàng)目。比如我們現(xiàn)在加入一個(gè)up.bmp的圖片到項(xiàng)目中,且放在文件夾Resources下面, 
2、將up.bmp右鍵選擇“屬性”的“生成操作”設(shè)置為"嵌入的資源"。

注意:訪問(wèn)資源的名稱規(guī)則為:項(xiàng)目命名空間.資源文件所在文件夾名.資源文件名

Assembly assm = Assembly.getGetExecutingAssembly();
Stream stream = assm.GetManifestResourceStream("CreateDatabase.Resources.aa.txt");
//讀取流
//文本
System.IO.StreamReader sr = new System.IO.StreamReader(stream);
string str = sr.ReadToEnd();
//XML文件
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(stream);
//圖片
Image img = Image.FromStream(stream);

到此這篇關(guān)于C#使用Resources資源文件的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C#面向切面編程之AspectCore用法詳解

    C#面向切面編程之AspectCore用法詳解

    AspectCore?是Lemon名下的一個(gè)國(guó)產(chǎn)Aop框架,提供了一個(gè)全新的輕量級(jí)和模塊化的Aop解決方案,下面我們就來(lái)深入了解下AspectCore在C#中的具體使用吧
    2024-01-01
  • 比較有效的使用C#讀取文件的代碼

    比較有效的使用C#讀取文件的代碼

    比較有效的使用C#讀取文件的代碼...
    2007-08-08
  • 詳解C#讀取Appconfig中自定義的節(jié)點(diǎn)

    詳解C#讀取Appconfig中自定義的節(jié)點(diǎn)

    我們往往需要在App.config中自定義一些節(jié)來(lái)滿足實(shí)際需要,而不依賴于App.config的appSettings,下面通過(guò)一個(gè)簡(jiǎn)單的實(shí)例來(lái)說(shuō)明自定義配置節(jié)點(diǎn)的設(shè)置與讀取
    2015-06-06
  • C#禁用雙擊窗體圖標(biāo)關(guān)閉窗體的方法

    C#禁用雙擊窗體圖標(biāo)關(guān)閉窗體的方法

    這篇文章主要介紹了C#禁用雙擊窗體圖標(biāo)關(guān)閉窗體的方法,通過(guò)對(duì)窗體參數(shù)的簡(jiǎn)單設(shè)置實(shí)現(xiàn)C#禁用雙擊窗體圖標(biāo)關(guān)閉窗體的功能,非常簡(jiǎn)單實(shí)用,需要的朋友可以參考下
    2015-08-08
  • C# InitializeComponent()方法案例詳解

    C# InitializeComponent()方法案例詳解

    這篇文章主要介紹了C# InitializeComponent()方法案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • Unity3D實(shí)現(xiàn)人物移動(dòng)示例

    Unity3D實(shí)現(xiàn)人物移動(dòng)示例

    這篇文章主要為大家詳細(xì)介紹了Unity3D實(shí)現(xiàn)人物移動(dòng)示例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-01-01
  • 詳解如何將.NET應(yīng)用轉(zhuǎn)換成Window服務(wù)

    詳解如何將.NET應(yīng)用轉(zhuǎn)換成Window服務(wù)

    這篇文章主要為大家詳細(xì)介紹了如何將.NET8.0應(yīng)用程序轉(zhuǎn)換成Windows服務(wù),文中的示例代碼講解詳細(xì),有需要的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-01-01
  • C# FileStream復(fù)制大文件功能

    C# FileStream復(fù)制大文件功能

    這篇文章主要為大家詳細(xì)介紹了C# FileStream復(fù)制大文件功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • C# 使用匿名函數(shù)解決EventHandler參數(shù)傳遞的難題

    C# 使用匿名函數(shù)解決EventHandler參數(shù)傳遞的難題

    C#動(dòng)態(tài)生成PictureBox并綁定右鍵菜單,實(shí)現(xiàn)刪除圖片
    2009-05-05
  • C# Datagridview綁定List方法代碼

    C# Datagridview綁定List方法代碼

    這篇文章主要介紹了C# Datagridview綁定List方法代碼,在進(jìn)行C#數(shù)據(jù)庫(kù)程序設(shè)計(jì)時(shí)非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2014-10-10

最新評(píng)論