好的,这很难解释,我会尽力明白:
我有几百个“字符串”项目,每个项目可能会带您进入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;
等
答案 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;
}