C#从列表框对象中获取信息

时间:2018-01-05 14:10:11

标签: c# listbox

我有一个名为chamberlist的类,其中只有一个列表,其中有腔室。 从文本文档中我将凭证加载到一个腔室对象中。

在我的列表框中,我已经从腔室列表中设置了我的数据源,因此每个添加到腔室列表的腔室都会将其列表添加到该列表框中。

我的问题是如何从该列表框中获取所选项目并对其执行某些操作,例如将标记1中的chambernumber和label2中的最大数量放入。

以下是我的课程:

ChamberList:

class ChamberList
{
    public static List<Chamber> chambers = new List<Chamber>();
    private static ChamberList instance = null;

    public ChamberList()
    {

    }

    public List<Chamber> readAllChambers()
    {

        return chambers;
    }

    public void addChamber(Chamber  c)
    {
        chambers.Add(c);
    }

    public static List<Chamber> getChambers()
    {
        return chambers;
    }
    public static void setChambers(List<Chamber> chambers)
    {
        ChamberList.chambers = chambers;
    }

    public static ChamberList getInstance()
    {
        if (instance == null)
        {
            instance = new ChamberList();
        }
        return instance;
    }
}

庭:

class Chamber
{
    private int chambernumber;
    private int maxGuests;
    private Boolean isBooked;
    public static List<Person> persons = new List<Person>();

    public Chamber(int chambernumber, int max, Boolean booked)
    {
        this.chambernumber = chambernumber;
        this.maxGuests = max;
        this.isBooked = booked;
    }

    public int getChamberNumber()
    {
        return chambernumber;
    }
    public void setChamberNumber(int chambernum)
    {
        this.chambernumber = chambernum;
    }
    public int getMaxGuests()
    {
        return maxGuests;
    }
    public void setMaxGuests(int max)
    {
        this.maxGuests = max;
    }
    public Boolean getIsBooked()
    {
        return isBooked;
    }
    public void setIsBooked(Boolean b)
    {
        this.isBooked = b;
    }
    public static List<Person> getPersons()
    {
        return persons;
    }
    public static void setPersons(List<Person> persons)
    {
        Chamber.persons = persons;
    }
}

形式:

public partial class Form2 : Form
{


    public Form2()
    {
        InitializeComponent();

    }

    private void button1_Click(object sender, EventArgs e)
    {
        DAOChamber dc = new DAOChamber();
        dc.loadAllChambers();
        listBox1.DataSource = ChamberList.getInstance().readAllChambers();
        listBox1.DisplayMember = "chambernumber";

    }

    private void button2_Click(object sender, EventArgs e)
    {


        label1.Text = listBox1.SelectedItem.ToString();
    }
}

Result

这是我到目前为止所得到的,但我希望代替“hotelsysteem.chamber”显示的房间号码以及填写所选房间信息的标签。

2 个答案:

答案 0 :(得分:0)

正确地投射SelectedItem,然后使用该对象,如下所示。我没有对它进行过测试,但它理论上应该有效。

Chamber c = listBox1.SelectedItem as Chamber;
label1.Text = c.chambernumber.ToString();

答案 1 :(得分:0)

如果你来自另一种(也许是Java?)语言,那么你的Chamber类看起来很像。这不是你在c#中编写普通模型的方式,它应该更像这样,使用属性;

public class Chamber
{
    public int ChamberNumber { get; set; }
    public int MaxGuests { get; set; } 
    public bool Isbooked { get; set; }

    public static List<Person> persons = new List<Person>();

    public Chamber(int chambernumber, int max, Boolean booked)
    {
        ChamberNumber = chambernumber;
        MaxGuests = max;
        IsBooked = booked;
    }
}

有了这个,您还可以使用这些值绑定到ListBox

DAOChamber dc = new DAOChamber();
dc.loadAllChambers();
listBox1.DataSource = ChamberList.getInstance().readAllChambers();
listBox1.DisplayMember = "ChamberNumber";

然后,您可以使用SelectedValueChanged获取所选项目并使用:

Chamber chamber = listBox1.SelectedValue as Chamber;
label1.Text = chamber.ChamberNumber.ToString();
label2.Text = chamber.MaxGuests.ToString();
// etc