当前位置: 首页 > 编程语言 > C#

如何在C#中手动使用资源(没有IDE行为)?分享

时间:2023-04-11 01:23:31 C#

C#中如何手动使用资源(没有IDE行为)?我正在使用visualstudio学习C#,我想更深入一点。我想知道如何手动使用项目资源?不是IDE。我搜索了该站点,但我只是看到这个人发布了如何在.NET中创建和使用资源,但这不是我要找的。我给自己定义了一个投影,手动设置了表单图标。我试过这个:首先,我添加了一个项目文件夹并将其重命名为Resources然后我添加了一个.ico文件并将其重命名为icon然后我在Resources.Designer.cs中定义了它internalstaticSystem.Drawing.Iconicon{get{objectobj=ResourceManager.GetObject("图标",resourceCulture);返回((System.Drawing.Icon)(obj));我在表单设计器中添加了这样的图标:this.Icon=Properties.Resources.icon;一切似乎都很好,当我键入Properties.Resources时,VSIntellisense中的图标短语可用。Properties.Resources.,但在第一次执行尝试时,图标没有设置在其他尝试中,我收到此错误:类型“setting_icon_from_resources.Properties.Resources”没有名为“icon”的属性。C:UsersmehdiDocumentsVisualStudio2012Projects资源设置图标中的资源Form1.Designer.cs我做错了什么?最后我找到了问题的答案。我真的没有通过搜索互联网和提问得到正确和最好的答案。一切都与资源有关,投影中使用的所有内容都必须经过以下步骤:导入/下载到项目文件夹。(将Resource文件夹中的文件作为投影子文件夹是很常见的).resx文件已定义/提交/转换为本地或全局投影。(.resx文件是XML)可以访问从C#.net获取句柄。(来自.resx设计器文件)(这是通过在全局或本地C#.net.resx设计器中定义的-通常作为属性)如果我们假设本地.resx作为类和投影的个人背包(全局)。resx文件作为公共抽屉,每个班级提供自己的背包和公共抽屉中的资源。VisualStudioIDE不会通过直接提供资源的正常过程使类使用其他类资源。但如果您对.resx文件和设计器文件了解更多,这将是可能的。首先让我解释一下一个班级如何使用其他班级资源。将文件导入本地.resx时,文件的硬编码副本将导入.resx的XML。如果使用XML编辑器打开.resx文件,则可以访问本地.resx文件的XML。Forexample,ifyouimportaniconfileintoaform,you'llseethefollowingcodesintheXMLassociatedwiththaticon:选择XML编辑器)AAABAAkAMDAAAAEACACoDgAAlgAAACAgAAABAAgAqAgAAEAPAAAYGAAAAQAIAMgGAADoFwAAEBAAAAEACABoBQAAsB4AAAAAAAABACAA510BABgkAAAwMAAAAQAgAKglAAAAggEAICAAAAEAIACoEAAAqKcBABgYAAABACAAiAkAAFC4AQAQEAAAAQAgAGgEAADYwQEAKAAAADAAAABgAAAAAQAIAAAAAAAACQAAAAAAAAAAAAAAAQAAAAEAAAAAAAAZHBQAHR4ZABgkFAAaKRYAHyAaAB0rGQAeMBkAIiQcACQpHgAiNBwAJDkeACUn...+Pn5D/j5+Q/4+fkP+Pn5D/j5+Q/4+fkP+Pn5D/j5+Q/4+fkP+Pn5D/j5+Q/4+fkPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAADAAAAAwAAAAAAAAAAAAwAAAAMAAAADAAAAAAwAAAAMAAAADAAAAAAwAAencodedfile,youcanseethatVSgivesitanametype($this.Icon.Icon.所以这些属性现在是可变的。要访问设计器或构造器文件中的资源,必须创建System.Resources.ResourceManager的对象。ResourceManager构造函数有两个重载,其中一个仅将resourceSource类型作为其输入参数。它必须是资源宿主的资源类型。可以这样得到它:typeof(Form1);所以创建一个ResourceManager对象:System.Resources.ResourceManagerresource=newSystem.Resources.ResourceManager(typeof(Form1))对象资源现在有一个GetObject()方法来访问.resx导入文件的名称,例如icon:((System.Drawing.Icon)(resources.GetObject("$this.Icon")))如果你打开窗体的设计器文件,你可以看到窗体图标的代码:this.Icon=((System.Drawing.Icon)(resources.GetObject("$this.Icon")));resource是IDE在窗体基类中创建的ResourceManager对象,所以你可以很方便的在设计器文件中使用。如果你想使用例如form1在form2中的图标,你可以这样引用它:this.AutoScaleDimensions=newSystem.Drawing.SizeF(6F,13F);this.AutoScaleMode=System.Windows.Forms.AutoScaleMode.Font;这个.ClientSize=newSystem.Drawing.Size(284,262);**this.Icon=(System.Drawing.Icon)((newSystem.Resources.ResourceManager(typeof(Form1))).GetObject("$this.Icon"));***this.Name="Form2";this.Text="Form2";这个.ResumeLayout(false);(仔细看以**开头的那一行)也许最好将其定义为构造函数中的表单公共静态属性以避免过多的嵌套类型:publicstaticSystem.Drawing.Iconicon{get{return(System.Drawing.Icon)((newSystem.Resources.ResourceManager(typeof(Form1))).GetObject("$this.Icon"));所以在form2设计器中:this.Icon=Form1.icon;到目前为止,使用其他类的资源,现在让我们谈谈手动定义和使用全局预测资源!全局.resx文件中没有导入文件的硬拷贝。这只是一个参考。例如,您使用IDE导入图标,它会创建一个Resource子文件夹并将文件放入其中。现在,如果您在解决方案管理器中打开属性并使用XML编辑器打开Resource.resx(右键单击>打开方式>XML编辑器),您可以看到以下代码:..Resourcesicon.ico;System.Drawing.Icon,System.Drawing,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a你可以看到它的引用地址和它的类型,甚至它的类型版本在它的指定值!它有一把钥匙,这在文化上很有趣!从其地址来看,该文件似乎只是添加到投影的完整性中。全局资源可以是一个投影文件夹,您计算机、网络或互联网上的每个位置!它有一个独特的钥匙!看来我们也可以通过项目中的键来访问资源了!现在,如果您在解决方案管理器中打开Resource.resx并打开资源设计器,您可以看到它在处理资源时通过属性获取:internalstaticSystem.Drawing.Iconicon{get{objectobj=ResourceManager.GetObject("图标",resourceCulture);返回((System.Drawing.Icon)(obj));因此可以使用Properties.Resources.icon访问资源并且不需要任何类型转换:this.Icon=Properties.Resources.icon;现在如果需要进一步处理资源,全局资源可以是一个接受输入参数的方法!在我的问题中,我给出了资源句柄,但在XML中没有任何对资源的引用。以上是C#学习教程:HowtousearesourcemanuallyinC#(withoutIDEbehavior)?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: