c#带有附加int值的Listbox字符串

时间:2013-09-30 16:22:48

标签: c# string winforms listbox

好的,这很难解释,我会尽力明白:

我有几百个“字符串”项目,每个项目可能会带您进入13种不同形式之一。而不是做类似的事情:

if(string == string) 转到form1

数百次我希望做类似以下的事情:

用户可以不关心哪个表单出现而且不需要知道,他们只需单击字符串对象就可以将它们转换为正确的表单。

我认为如果每个字符串对象都有一个关联的INT值会很容易,然后我会转到相应的表单,而不是进行所有字符串处理和比较。

我没有看到使用listbox执行此操作的方法。我应该使用不同的结构,或者使用listbox来解决这个问题吗?

感谢您的帮助。

编辑:所以,我决定使用数据集而不是类对象:

        DataRow row;
        row = itemTableA.NewRow();
        row["itemA"] = "Item Description";
        row["formA"] = 1;
        itemTableA.Rows.Add(row);
        row = itemTableA.NewRow();
        row["itemA"] = "Item Description";
        row["formA"] = 2;
        itemTableA.Rows.Add(row);

对于每个数据对象(如果可以解决的话,我可能会尝试从文件读入)

然后我的列表框我做了:

        itemList.DataSource = itemTableA;
        itemList.DisplayMember = "itemA";
        itemList.ValueMember = "formA";

最后,我做了我的if语句:

        if (itemList.SelectedValue.ToString() == "1")
            do something;
        if (itemList.SelectedValue.ToString() == "2")
            do something;

4 个答案:

答案 0 :(得分:2)

Listbox项目是object,它们在列表中由ToString()返回的值表示。您可以创建一个包含要显示的字符串的自定义对象,以及一个标记要使用的表单的变量。然后你让你的自定义对象返回ToString()中的字符串,这样它就会正确地显示在Listbox中:

public class ListItem
{
    public String value;
    public int form;
    public ListItem(string text, int formNumber)
    {
        this.value = text;
        this.form = formNumber;
    }


    public string ToString()
    {
        return value;
    }
}

然后在填充object时将字符串包裹在Listbox周围。

我在你提到的时候使用了int,但为了清晰起见,我建议使用enum

答案 1 :(得分:1)

有几种方法可以做到这一点(我假设你没有按照你提出的问题的方式使用MVVM模式)。这是一个

创建自定义类

public Class CustomString
{
    public string MyString {get; set;}
    public int FormIdentifier {get; set;}
}

在Code Behind中有一个属性,它是一个CustomStrings列表和一个名为CurrentString的CustomerString实例

public List<CustomString> StringList {get; set;}
public CustomString CurrentString{get; set;}

然后在你的xaml中,将SelectedItem绑定到CurrentString

<ListBox ItemsSource="{Binding StringList}" DisplayMemberPath="MyString" SelectedValuePath="FormIdentifier" SelectedItem="{Binding CurrentString}" SelectionChanged="ChangedSelection">
    ........
</ListBox>

在Code Behind File中创建一个偶数处理程序:

private void ChangedSelection(object sender, SelectionChangedEventArgs e)
{
   switch(CurrentString.FormIdentifier)
   {
       case 1:
           Form1 form = new Form1();
           form.ShowDialog();
           break;

       case 2:
           Form2 form2 = new Form2();
           form2.ShowDialog();
           break;
   } 
}

如果您需要MVVM模式解决方案,请告诉我,我会写一个。

答案 2 :(得分:0)

void formcheck()
{
   foreach(Object item in ListBox1.Items)
   {
     if (item.ToString() == "Form1")
     {
     Form F1 = new Form1{};
     F1.Show()
     }
     if (item.ToString() == "Form2")
     {
     Form F2 = new Form2{};
     F2.Show()
     }
     // And So On...
   }
}

答案 3 :(得分:0)

您可以使用字典来保存表单名称和包含值的列表。以下是用记事本编写的示例元代码:

private Dictionary<string, List<string>> formResolutionDictionary;

void SetUp()
{
    formResolutionDictionary = new Dictionary<string, List<string>> ();
    formResolutionDictionary.Add("form1", new List(){"input1", "input2"};
    formResolutionDictionary.Add("form2", new List(){"input3", "input4"};
    ...
}

string ResolveFormName(string input)
{
    return from keyValue in formResolutionDictionary
            where keyValue.Value == input
            select keyValue.Key;
}