从 .resx 文件中的资源中读取键、值和注释
Read key, value and comment from resources in a .resx file
我有一个包含字符串名称值对的 .resx 文件。现在我想使用 C#(Windows 形式)以务实的方式将名称和值对放入列表中。我怎样才能做到这一点。但这是列表中价值成就的一个转折点,我有一个 "Combo box" 和两个文本框。在 运行 时,所有键都应添加到组合框中,并自动为其他两个测试框填充值和注释。请帮助我完成这项任务。
提前致谢...
看看ResXResourceReader,这可以很容易地完成你想做的事情。
例如,您可以这样做:
private void Form1_Load(object sender, EventArgs e)
{
//ComboBox will use "Name" property of the items you add
comboBox1.DisplayMember = "Name";
//Create the reader for your resx file
ResXResourceReader reader = new ResXResourceReader("C:\your\file.resx");
//Set property to use ResXDataNodes in object ([see MSDN][2])
reader.UseResXDataNodes = true;
IDictionaryEnumerator enumerator = reader.GetEnumerator();
while (enumerator.MoveNext())
{ //Fill the combobox with all key/value pairs
comboBox1.Items.Add(enumerator.Value);
}
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
if (comboBox1.SelectedIndex == -1)
return;
//Assembly is used to read resource value
Assembly currentAssembly = Assembly.GetExecutingAssembly();
//Current resource selected in ComboBox
ResXDataNode node = (ResXDataNode)comboBox1.SelectedItem;
//textBox2 contains the resource comment
textBox2.Text = node.Comment;
//Reading resource value, you can probably find a smarter way to achieve this, but I don't know it
object value = node.GetValue(new AssemblyName[] { currentAssembly.GetName() });
if (value.GetType() != typeof(String))
{ //Resource isn't of string type
textBox1.Text = "";
return;
}
//Writing string value in textBox1
textBox1.Text = (String)value;
}
我有一个包含字符串名称值对的 .resx 文件。现在我想使用 C#(Windows 形式)以务实的方式将名称和值对放入列表中。我怎样才能做到这一点。但这是列表中价值成就的一个转折点,我有一个 "Combo box" 和两个文本框。在 运行 时,所有键都应添加到组合框中,并自动为其他两个测试框填充值和注释。请帮助我完成这项任务。 提前致谢...
看看ResXResourceReader,这可以很容易地完成你想做的事情。
例如,您可以这样做:
private void Form1_Load(object sender, EventArgs e)
{
//ComboBox will use "Name" property of the items you add
comboBox1.DisplayMember = "Name";
//Create the reader for your resx file
ResXResourceReader reader = new ResXResourceReader("C:\your\file.resx");
//Set property to use ResXDataNodes in object ([see MSDN][2])
reader.UseResXDataNodes = true;
IDictionaryEnumerator enumerator = reader.GetEnumerator();
while (enumerator.MoveNext())
{ //Fill the combobox with all key/value pairs
comboBox1.Items.Add(enumerator.Value);
}
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
if (comboBox1.SelectedIndex == -1)
return;
//Assembly is used to read resource value
Assembly currentAssembly = Assembly.GetExecutingAssembly();
//Current resource selected in ComboBox
ResXDataNode node = (ResXDataNode)comboBox1.SelectedItem;
//textBox2 contains the resource comment
textBox2.Text = node.Comment;
//Reading resource value, you can probably find a smarter way to achieve this, but I don't know it
object value = node.GetValue(new AssemblyName[] { currentAssembly.GetName() });
if (value.GetType() != typeof(String))
{ //Resource isn't of string type
textBox1.Text = "";
return;
}
//Writing string value in textBox1
textBox1.Text = (String)value;
}