c# - 如何将资源文件中的原始 this.text 与覆盖的文本进行比较
问题描述
我有一个窗体。每次点击一段代码时,标题都会被覆盖。默认情况下,标题将在表单的 resx 文件中,直到被覆盖。
Form1.resX
<data name="$this.Text" xml:space="preserve">
<value>Report</value>
</data>
Form2.cs
public void Report2()
{
Form1 frm = new Form1();
frm.Text="Report2"
//Some code
}
public void Report3()
{
Form1 frm = new Form1();
frm.Text="Report3"
//Some code
}
在这里this.Text
被覆盖时Report2()
并Report3()
执行
在 Form1.cs 中
private void Report_ColumnClick(Object eventSender, ColumnClickEventArgs eventArgs)
{
if(this.Text!="Report")
{
//Some code
}
}
因此,在 Form1.cs 中,我对 resx 原始值进行了硬编码,以与覆盖的值进行比较。无论如何我可以动态而不是硬编码。
解决方案
不知道这个问题是不是和你的一样?
根据那篇文章,它应该很简单:
ResourceManager rm = new System.Resources.ResourceManager(typeof(Form1));
string formText = rm.GetString("Form1.Text");
或者:
如果这不起作用,您可以尝试从程序集中嵌入的清单中读取信息。
使用反射获取嵌入的资源名称,typeof(Form1).Assembly.GetManifestResourceNames();
这将为您提供名称列表(如果有)。
使用正确的名称来提取嵌入的流。
var resourceStream = typeof(Form1).Assembly.GetManifestResourceStream("Your_NamesPace_Here.Form1.resources");
using (System.Resources.ResourceReader resReader = new ResourceReader(resourceStream))
{
var dictEnumerator = resReader.GetEnumerator();
while (dictEnumerator.MoveNext())
{
var ent = dictEnumerator.Entry;
//ent will be a key:value pair, so use it like this
if (ent.Key as string == "$this.Text")
{
string originalFormName = ent.Value as string;
}
}
}
推荐阅读
- python - 有没有办法表示复数以存储在 Spark DF 中?
- scala - 如何通过从现有 RDD 中选择特定数据来创建 RDD,其中输出应为 RDD[String]?
- javascript - 为什么我们需要 VariableEnvironment 来识别 Javascript 中执行上下文的状态?
- flutter - 嵌套json数据的序列化
- python - 如何使用 django 上传 1cr 行 .csv 文件?
- java - 无法解释的 Singleton / Picocli 行为
- unity3d - Unity我如何获得这些块
- ajax - 为 AJAX 调用设置 QUnit 测试
- javascript - 在子 .then 中访问父 .then 的变量,嵌套承诺,量角器
- google-chrome - 为什么 Chrome 无法为 Word 插件安装 ClickOnce VSTO?