Jag har två formulär i min applikation. Formulär 1 har en ListView. Formulär 2 har diverse textfält, combo boxar etc. Vad jag vill åstadkomma med detta är att när användaren har fyllt i uppgifterna i formulär 2 och klickat på Spara-knappen så ska de ifyllda uppgifterna visas i ListView:n i formulär 1. Jag har undersökt ett färdigt skript där det bara ska vara att skriva ListView.Items.Add(ListViewItem). Kruxet jag har är att jag inte kan komma åt ListView:n som finns i formulär 1. Vanlig fråga (därför du inte fått svar än). Tack för ett superbra tips!Problem med ListView
Blir jag tvungen att spara uppgifterna från formulär 2 till en fil innan jag kan visa dom i ListView:n i formulär 1 eller hur ska jag göra?Sv: Problem med ListView
Det finns 2 sätt.
1. Skicka med en referens till Listviewn när Form2 skapas eller när den visas med Show/ShowDialog. Då kommer du åt den från Form2.
Form1:
namespace FormsProject
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btnAdd_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2(listView1);
form2.ShowDialog();
}
}
}
Form2:
namespace FormsProject
{
public partial class Form2 : Form
{
ListView listView;
public Form2(ListView lv)
{
listView = lv;
InitializeComponent();
}
private void btnOK_Click(object sender, EventArgs e)
{
listView.Items.Add(textBox1.Text);
this.Close();
}
}
}
2. Detta är ett "snyggare" sätt. Mer objektorienterat. Returnera värden från Form2 till Form1.
Form1:
namespace FormsProject
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btnAdd_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2();
ListViewItem lvi = form2.ShowDialog();
//Här stannar koden och väntar på att metoden ShowDialog i Form2 ska returnera
if (lvi != null)
listView1.Items.Add(lvi);
}
}
}
Form2:
namespace FormsProject
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
public new ListViewItem ShowDialog()
//Ordet new används eftersom metoden ShowDialog redan finns i en Form och vi ersätter/gömmer den med en egen variant
{
DialogResult dr = base.ShowDialog();
if (dr == DialogResult.OK)
return new ListViewItem(textBox1.Text);
else
return null;
}
private void btOK_Click(object sender, EventArgs e)
{
DialogResult = DialogResult.OK;
}
}
}
I exempel 2 returnerar jag en ListViewItem som skapas i Form2. Det går lika bra att returnera ett annat objekt som t.ex. en sträng. Det snyggaste och bästa är dock, om du har många fält att fylla i, att ha en klass från vilken du skapar ett objekt, t.ex. User, sen returnerar du en User. På detta sätt behöver inte Form2 känna till ens att det är en ListView och om man alltid programmerar så smart är det lättare sen att byta ut t.ex. kod i en form utan att behöva ändra nån annanstans.
Puh...det blev en hel del skrivande!
Sv:Problem med ListView
Tycker att det är lite svårnavigerat här på pellesoft.se så därför använde jag sökmotorn som inte hittade vad jag sökte. Men jag ska titta bland vanliga frågor nästa gång innan jag frågar (om jag hittar dit vill säga).