我有一个for循环来逐行读取流阅读器。这非常有效。现在我在阅读流阅读器的文件时遇到了问题。它是一个包含两列信息的csv文件。第一个(A)包含一个C#元素,如文本框或标签(就像“label_1_title”),它在我的项目中声明。第二个(B)包含一个普通的简单字符串,如“Hello”。
现在我想将A列的字符串内容转换为真实的现有元素。示例:我在A列中写了“label_1_title”,这是我项目中存在的元素。现在我想使用此元素(例如)将其内容更改为该行的B列的内容。
public void SetSprachpaket(string Sprachpaket)
{
StreamReader StreamReader = new StreamReader(Sprachpaket, Encoding.UTF8);
string Inhalt = StreamReader.ReadLine();
for (int i = 1; Inhalt != null; i++)
{
var Items = Inhalt.Split(new Char[] { ';' });
object Element = Items[0].GetType(); // Convert the string content of Items[1] to the existing object
Element = Items[1]; // Take this existing object and give it the string content of Items[2]
Inhalt = StreamReader.ReadLine();
}
StreamReader.Close();
}
我希望你能帮助我。提前致谢。亲切的问候。
修改
object Element = Items[0].GetType(); // Get (let's say) the string "myString"
Element = Items[1]; // --> myString = ...
答案 0 :(得分:2)
请不要依赖项目中的内部命名。您应该在元素和列数据之间进行某种显式映射。
将CSV文件转储到列A =&gt;的Dictionary<string, string>
中。 B栏。在包含要填充的所有元素的元素上,将DataContext设置为字典。像这样定义你的标签:
<Label Content="{Binding [label_1_title]}" />
有关详细信息,请参阅Data Binding Overview。这将查找字典键“label_1_title”并将内容设置为标签加载时的值。
如果您想使用标签字典以外的其他数据绑定,我建议您使用DataContext的自定义对象,该对象将字典存储在LabelDictionary
等属性中。在这种情况下,绑定应该是:
<Label Content="{Binding LabelDictionary[label_1_title]}" />
答案 1 :(得分:1)
只需使用foreach
foreach(control x in this.Control)
{
if(x.Name == A) // For A means the name of the object
{ x.Text = B; } // For B means the string
}
答案 2 :(得分:0)
这不是理想的,你需要玩它,但我想你想要的方向。
while (Inhalt != null)
{
switch (Items[0])
{
case "label"
element = new Label();
element.Text = Items[1];
break;
case "textbox"
element = new Textbox();
element.Text = Items[1];
break;
case "numericUpDown"
element = new NumericUpDown();
element.Value = Item[1];
break;
}
}
修改:如果您不想从头开始填充表单,请使用this.Controls.Find()
查找具有该名称的控件。
答案 3 :(得分:0)
如果项目[0]是控件的名称,则可以执行此操作以查找控件
this.Controls.Find(项[0])
您可能必须根据要分配给
的属性将其强制转换为适当的类型control.Text = items[1];
假设第一列是同一类中字段的名称而不是控件的名称,则可以执行此操作
var field = this.GetType().GetField(items[0],
BindingFlags.Instance
| BindingFlags.NonPublic);
var control = (Control)field.GetValue(this,null);
control.Text = items[1];