中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C#如何使用Resources資源文件

發布時間:2022-06-14 16:50:01 來源:億速云 閱讀:2794 作者:iii 欄目:開發技術

這篇文章主要講解了“C#如何使用Resources資源文件”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“C#如何使用Resources資源文件”吧!

一、創建資源文件

可以將字符串、圖像或對象數據等資源包含在資源文件中,方便應用程序使用。

創建資源文件的方法:

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

創建一個包含字符串、圖像或對象數據的 XML 資源 (.resx) 文件。

使用 Visual Studio 創建一個資源文件并將其包含在項目中。

Visual Studio 提供一個資源編輯器,借助該編輯器,可添加、刪除和修改資源。 編譯時,資源文件會自動轉換成二進制 .resources 文件,并嵌入應用程序程序集或附屬程序集中。

注意:內部使用資源文件生成器 (Resgen.exe) 將文本文件轉換成二進制資源 (.resources) 文件。 然后使用語言編譯器將這個二進制資源文件嵌入可執行應用程序或應用程序庫,或者使用程序集鏈接器 (Al.exe) 將這個二進制資源文件嵌入附屬程序集。

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

可以創建一個 .resx 文件、枚舉其資源并按名稱檢索特定資源。

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

二、使用ResourceManager讀取項目中資源文件

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

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

  • 1、被嵌入或編譯成 Satellite Assembly:使用ResourceManager來獲得在 Assembly 中的資源。 

  • 2、單獨文件,沒被編譯或嵌入到Assembly:使用ResourceManager.CreateFileBasedResourceManager來獲得資源集(ResourceSet)。

在新建的Windows項目中,一般自動生成兩個資源文件:Form1.resx和Resources.resx。其中,Form1.resx附屬Form1窗體,Resources.resx在項目Properties子文件夾下。

下面我們看看讀取項目中資源文件

1、強類型讀取項目中resx資源文件。

1、創建一個項目的默認資源文件。

C#如何使用Resources資源文件

2、在項目“Properties”目錄下,可以看到Resources.resx。

C#如何使用Resources資源文件

3、添加相關的資源。

C#如何使用Resources資源文件

4、可以看到系統自動生成的強類型類。

C#如何使用Resources資源文件

使用強類型可直接使用類

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

不僅在Properties文件夾下可以建立資源文件,也可以在任何地方創建資源文件。在建立名稱為MyResource資源文件的同時,設計器會自動生成兩個文件:MyResource.resx和MyResource.Designer.cs。其中后一個文件就包裝了設計器自動生成的代碼,以方便對資源文件的強類型訪問。

C#如何使用Resources資源文件

強類型訪問代碼:

ZS.MouldManagement.Mould._333

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

ResourceManager 可以根據不同的 UICulture 設置返回不同的本地資源,我們只需知道調用資源用到它就可以了。

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

//多語言
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的命名空間, 資源文件名稱不帶擴展名
this.logo.Image = (Image)rm.GetObject("Logo");//Get**方法具有重載方法,第二個參數為CultureInfo對象
this.Title.Text = rm.GetString("Title");    //資源文件名稱不帶擴展名

三、Windows項目中的窗體資源文件

因為對Form1.resx的訪問需要構造Syste.Resources.ResourceManager對象,而訪問Resources.resx里的資源可以直接使用Properties.Resources.resName(resName是你添加的資源的名稱)。 
只有向窗體上添加圖標、圖像等資源后

C#如何使用Resources資源文件

會在窗體設計器Form1.Designer.cs自動生成下面的代碼

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

從代碼可以看出,c#將窗體的圖標文件作為資源進行保存了起來,然后利用ComponentResourceManager來獲取這些資源。

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

使用ComponentResourceManager類進行界面多語言切換

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>
/// 遍歷窗體所有控件,針對其設置當前界面語言
/// </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()從此程序集加載指定的文件。

當直接嵌入一資源時,也就是說,不通過一個資源文件而直接將一資源(比如圖片)嵌入到 Assembly 中。這可以在 VS.NET 中通過設置一文件的 Build 屬性為“嵌入的資源” 實現。

在這種情況下 ResourceManager 就沒有用了,因為它只能獲取 .resources 資源文件。那么如何調用這類的資源呢?我們只要了解一些 System.Reflection.Assembly 這個類中的一些函數就可以了。

有三個相關函數,不過我們只需要 Assembly.GetManifestResourceStream 這個函數。這個函數將一嵌入到 Assembly 中的資源以 stream 的方式返回,而我們可以將這個 stream 轉成在 .NET 中可用的對象。

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

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

注意:訪問資源的名稱規則為:項目命名空間.資源文件所在文件夾名.資源文件名

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);

感謝各位的閱讀,以上就是“C#如何使用Resources資源文件”的內容了,經過本文的學習后,相信大家對C#如何使用Resources資源文件這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

南溪县| 拉萨市| 永兴县| 无为县| 保德县| 新巴尔虎右旗| 汪清县| 定远县| 闽侯县| 瑞安市| 丰镇市| 柏乡县| 什邡市| 监利县| 翼城县| 定日县| 肥城市| 互助| 万全县| 阿瓦提县| 安西县| 敦化市| 侯马市| 东兴市| 昌黎县| 东阿县| 五莲县| 九龙城区| 新竹县| 沈丘县| 越西县| 麻阳| 扎赉特旗| 壤塘县| 花莲县| 稻城县| 南华县| 勐海县| 泰和县| 铁力市| 武隆县|