Hej! Jag föreslår att du använder ListViewItem. Det snyggaste är ju att göra en egen klass. Tack för svaren!ListBox i C#: Både text och value?
Jag försöker göra en listbox som har både text och värde, precis som man kan göra i HTML:
<select name='test'>
<option value='1'> Värde nummer ett </option>
<option value='3'> Värde nummer tre </option>
</select>
Kan man göra motsvarande i C#? Jag har letat som en galning, o folk pratar om ListItem, Collections o lite annat men jag får inte ihop det.
Jag testade att skapa en klass, listItem (egenskriven), och lägga värdena där. Det fungerar "delvis" såtillvida att jag kan få objektet returnerat och ta ut "value"-delen... Men i själva ListBox:en visas "objektet", dvs en massa text som inte ska vara där.
Min fråga är således: finns det något smidigt sätt att göra det som i HTML?Sv: ListBox i C#: Både text och value?
På varje ListViewItem du skapat finns det en property som heter Tag. Har för mig jag använt den för att lagra värdet. Sen finns propertyn text där du kan ha texten.
<code>
ListViewItem lvi = new ListViewItem("AC"); //Här sätts .Text
lvi.Tag = "MittVärde";
listBox1.Items.Add(lvi.Text);
</code>
Ang. egen listitem, så är det ToString som används för att fylla i kontrollen, så här måste du överlagra ToString-metoden isf.
Samma gäller mitt exempel, ToString ger objektet, därför har jag skrivit lvi.Text, alternativt får man överlagra ToString så den ger samma som text.
/AndrecSv:ListBox i C#: Både text och value?
Formen:
<code>
partial class Form1 : Form
{
private void button1_Click(object sender, EventArgs e)
{
ListItem li = new ListItem("MinText", "MittVärde");
listBox1.Items.Add(li);
}
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
ListBox lb = (ListBox)sender;
ListItem li = (ListItem)lb.SelectedItem;
MessageBox.Show(li.Text, "Text");
MessageBox.Show(li.Value, "Värde");
}
}
</code>
ListItem-klassen:
<code>
public class ListItem
{
private string text;
private string value;
public string Text
{
get
{
return text;
}
set
{
text = value;
}
}
public string Value
{
get
{
return value;
}
set
{
this.value = value;
}
}
public ListItem()
{
text = "";
value = "";
}
public ListItem(string Text)
{
text = Text;
value = "";
}
public ListItem(string Text, string Value)
{
text = Text;
value = Value;
}
public override string ToString()
{
return text;
}
}
</code>
/AndrecSv: ListBox i C#: Både text och value?
Löste det dock innan genom att göra ett eget object, listItem som hade just en metod
override ToString() {
}
Det enda felet jag gjorde tidigare var att jag missade override, vilket gjorde att inget hände!
Men tack ändå för de andra kodförslagen - lärde mig en del av det!
MVH