如何使用变量,保存在字符串内容中(在C#,WPF中)

时间:2014-02-06 13:36:08

标签: c# wpf string csv streamreader

我有一个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 = ...

4 个答案:

答案 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];