ListBox, выберите изменение индекса

Один для посещений и один для пикапов. Когда пользователь добавляет какие-либо посещения или пикапы в список, он также добавляется в поле списка для показа пользователю.

Мой вопрос заключается в том, что когда я щелкнул элемент внутри списка, например, Indexchanged, я хотел бы, чтобы он открыл новый графический интерфейс, который относится либо к посещениям, либо к доставке, поэтому, если они нажимают на посещение, открывается форма посещения, как показано ниже в моем code, но как я могу заставить его различать списки, чтобы он знал, какую форму открывать?

 private void lstVisits_SelectedIndexChanged(object sender, EventArgs e)
    {
        //Allow the user to click on the listbox to open a visit
        //This event is called after the user has clicked on the list
        int index = lstVisits.SelectedIndex;
        //Get the index of the Visit that the user has clicked upon

        Visits selected = theList.getVisits(index);
        //Get the visits object from the list

        Visitsform.visits = selected;
        //Ensure that the appointment form references the selected visit

        Visitsform.ShowDialog();
        //Show the visits form

        updateList();
        //update the list as the user may have deleted the appointment

person TAM    schedule 25.11.2012    source источник
comment
Где хранятся посещения и доставки? У вас есть два списка, один для посещений, а другой для доставок, или оба добавлены в один и тот же список?   -  person Nikola Davidovic    schedule 25.11.2012
comment
Это два разных списка: один класс с именем List.cs для списка посещений и один класс с именем pickuplist.cs для хранения доставок, и оба они добавляются в один список.   -  person TAM    schedule 25.11.2012
comment
Что такое theList? А что делает метод getVisits(index)?   -  person Sergey Berezovskiy    schedule 25.11.2012
comment
theList — это ссылка из формы на объект списка в классе списка, а метод getVisits(Index) вызывает getVisits() из списка, который заполняет поле списка посещениями.   -  person TAM    schedule 25.11.2012


Ответы (1)


Если элементы из обоих списков хранятся в одном и том же listBox, вы можете использовать что-то вроде этого:

РЕДАКТИРОВАТЬ: Если вы хотите получить объекты из listBox, вы должны добавить их как объекты в listBox, например:

Visits v = new Visit();
Pickups p = new Pickup();
lstVisits.Items.Add(v);
lstVisits.Items.Add(p);    


private void lstVisits_SelectedIndexChanged(object sender, EventArgs e)
            {
                if (listBox1.SelectedItems.Count > 0)
                {
                    object o = listBox1.SelectedItems[0];
                    if (o is Visits)
                    {
                        Visits visit = (Visits)o;
                        Visitsform.visits = visit;
                        Visitsform.ShowDialog();
                    }
                    else
                    {
                        Deliveries delivery = (Deliveries)o;
                        Deliveriesform.visits = visit;
                        Deliveriesform.ShowDialog();
                    }
                }
            }
person Nikola Davidovic    schedule 25.11.2012
comment
Эй, я попробовал это, и он выделяет первую строку операторов else и дает мне следующую ошибку. Невозможно преобразовать объект типа «System.String» в тип «Coursework_2.Pickups». - person TAM; 25.11.2012
comment
Вы должны иметь возможность привести объект к его типу, если вы добавите его как объект. Похоже, вы добавляете только строку для объекта, и вы не можете ее использовать. Переопределите метод ToString в своих классах (Visits и Pickups) и заполните ими listBox. Тогда вы сможете бросить их. - person Nikola Davidovic; 25.11.2012
comment
В классе пикапов у меня есть base.ToString, это то, что вы имеете в виду - person TAM; 25.11.2012
comment
nvm я сделал переопределение, но я все еще получаю ту же ошибку, что и раньше - person TAM; 25.11.2012
comment
Редактирование объясняет, как вы должны добавлять свои экземпляры в listBox. - person Nikola Davidovic; 25.11.2012
comment
Спасибо за всю помощь, но я не знаю, похоже, это не работает, возможно, это моя вина, так как я понятия не имею, что делать, я добавляю их как lstVisits.items.addrange(listOfPic.toArray()) - person TAM; 25.11.2012
comment
Я думаю, мне просто нужно найти другой способ, например, 2 списка или что-то в этом роде. - person TAM; 25.11.2012
comment
Вы не должны принимать ответ, если он вам не помогает. Возможно, вам следует добавить в вопрос больше кода, чтобы было более понятно, что вы пытаетесь сделать. - person Nikola Davidovic; 26.11.2012
comment
Это действительно помогло мне в некотором смысле, просто не для моего проекта, но это дало мне лучшее понимание этого в целом... Также я бы добавил больше кода, но я действительно не знаю, что добавить, у меня есть 3 графических интерфейса 4 класса и около 12 кнопок - person TAM; 26.11.2012
comment
давайте продолжим это обсуждение в чате - person TAM; 26.11.2012