Доступ к списку из другого класса?

86
5

Привет, ребята, поэтому я создал класс, поэтому, когда пользователь выбирает элемент из списка, он удаляет этот элемент, кроме проблемы, я не могу получить доступ к списку. Я также пробовал публично, но в коде form1.cs единственное, что было самым клонимым в этом списке, -


помните имя списка - ProgramlistBox
Хорошо, ребята, я отредактировал это сообщение;


  private void button1_Click(object sender, EventArgs e)
{
if(ProgramsListbox.SelectedIndex == -1)
{
MessageBox.Show("Please select an item to uninstall!");
}
else
{
ProgramsListbox_SelectedIndexChanged("",EventArgs.Empty);
}
}

этот код является классом FORM1.CS, и у меня есть другой класс под названием UninstallItem.cs, где я хочу, чтобы мой код был, это ниже мой другой класс


пространство имен PC_TECH_Registery_Cleaner
{   class UninstallItem   {


    public void uninstallSelectedItem()
{
Form1 c = new Form1();

}
}


}


И это ниже все еще в моем классе FORM1.CS, я экспериментировал с ним:


 public void ProgramsListbox_SelectedIndexChanged(object sender, EventArgs e)
{

//this will access the Uninstall item class so we can uninstall selected item.
UninstallItem c = new UninstallItem();
c.uninstallSelectedItem();
}

спросил(а) 2021-01-19T17:07:17+03:00 2 месяца, 3 недели назад
1
Решение
62

Два простых способа думать об этом - это


    Вызвать метод в своем классе из обработчика событий в вашей форме
    У вас есть метод для вашего класса, который соответствует сигнатуре обработчика событий и подписывается на событие.

Первое не требует серьезных изменений


private MyClass myClass = new MyClass();
public void ProgramsListbox_SelectedIndexChanged(object sender, EventArgs e)
{
myClass.DoSomething();
}

Второй требует, чтобы ваш класс имел конкретный метод, который соответствует сигнатуре этого обработчика событий, находящегося в вашей форме


public class MyClass
{
public void DoSomething(object sender, EventArgs e)
{
var listBox = (ListBox)sender;
// read selected index perhaps, or selected item maybe
}
}

И затем в вашей форме


private MyClass myClass = new MyClass();
protected override void OnLoad(EventArgs e)
{
this.ProgramsListBox.SelectedIndexChanged += myClass.DoSomething;
}

ответил(а) 2021-01-19T17:07:17+03:00 2 месяца, 3 недели назад
62

Внутри Form1.cs создайте экземпляр класса UnIstallItem и используйте его. Затем на кнопке Click вызывается метод RemoveSelected класса UnInstaItem, передавая ему программыListBox и он должен удалить выбранный элемент.


public class Form1:Form
{
ListBox ProgramsListbox;
UninstallItem unistall;

public Form1(){
InitializeComponent();
uninstall = new UninstallItem();
button1.Click+= button1_Click;
}

void button1_Click(object sender, EventArgs e){
unistall.RemoveSelected(ProgramsListbox);
}
}

Затем в вашем внешнем классе


public class UninstallItem{
public UninstallItem{}

public void RemoveSelected(ListBox list)
{
if(list.SelectedIndex==-1)
{
MessageBox.Show("Please Select Item from List");
return;
}
list.Items.RemoveAt(list.SelectedIndex);

}
}

ответил(а) 2021-01-19T17:07:17+03:00 2 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема