如何将原始this.text从资源文件比较为覆盖的文本

问题描述

我有一个Windows窗体。每次点击一段代码标题都会被覆盖的地方。 认情况下,标题将保留在表单的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.TextReport2()执行时,Report3()被覆盖

在Form1.cs

private void Report_ColumnClick(Object eventSender,ColumnClickEventArgs eventArgs)
{
if(this.Text!="Report")
{
//Some code
}
}

因此在Form1.cs中,我正在对resx原始值进行硬编码以与覆盖的值进行比较。 无论如何,我可以动态地完成它,而不是硬编码。

解决方法

我不确定this question是否与您的相同?

根据该帖子,它应该很简单:


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