-1

好的,这很难解释,我会尽力说清楚:

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

if (string == string) 转到 form1

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

用户可能不太关心出现哪种形式并且不需要知道,他们只需单击字符串对象,它就会将它们带到正确的形式。

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

我看不到使用列表框执行此操作的方法。是否有我应该使用的不同结构,或者解决方法以使其与列表框一起使用?

谢谢你的帮助。

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

        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

4 回答 4

2

Listboxes items 是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

于 2013-09-30T16:36:23.857 回答
1

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

创建自定义类

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

在代码后面有一个属性,它是一个自定义字符串列表和一个名为 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>

在代码隐藏文件中创建一个偶数处理程序:

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 模式解决方案,请告诉我,我会写一个。

于 2013-09-30T16:49:12.203 回答
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...
   }
}
于 2013-09-30T16:27:59.060 回答
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;
}
于 2013-09-30T16:31:30.320 回答