2016-05-09 33 views
2

Hey Leute, also habe ich eine Klasse gemacht, also wenn der Benutzer ein Element aus der Listbox auswählt, deinstalliert es dieses Element, außer das Problem ist, dass ich nicht auf das Listenfeld zugreifen kann. Ich versuchte öffentliches aswell, aber im code von form1.cs ist die einzige Sache, die zu diesem Listenfeld schließend istZugriff auf Listbox von einer anderen Klasse?

im Verstand Name der Listbox ist ProgramslistBox OK Kerle, die ich diesen Posten redigierte;

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); 
     } 
    } 

dieser Code Form1.cs Klasse ist, und ich habe eine andere Klasse namens UninstallItem.cs ist, wo ich meinen Code wollen, um dies unten ist meine andere Klasse

Namespace PC_TECH_Registery_Cleaner { Klasse UninstallItem {

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

    } 
} 

}

Und unten ist sti ll in meiner form1.cs Klasse, ich war das Experimentieren mit ihm:

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(); 
    } 
+0

Warum nicht einfach die Methode Ihrer Klasse innerhalb dieses Ereignishandlers auf dem Formular aufrufen? – Jamiec

+0

Erstellen Sie einen neuen Konstruktor in Ihrer zweiten Form, der eine 'Form' als Parameter annimmt. Übergeben Sie dann die Instanz des ersten Formulars an den Konstruktor des anderen Formulars, und speichern Sie es in einer Eigenschaft. Dann können Sie über diese Eigenschaft auf alle Steuerelemente des ersten Formulars aus dem zweiten Formular zugreifen. –

Antwort

1

Innerhalb Ihrer Form1.cs erstellen Instanz von UnIstallItem-Klasse und verwenden Sie es. Klicken Sie dann auf Button klicken Sie auf "RemoveSelected" -Methode der UnInstaItem-Klasse, indem Sie programsListBox an es übergeben und es sollte das ausgewählte Element entfernen.

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); 
    } 
} 

Dann in Ihrer externen Klasse;

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); 

    } 
} 
+0

Danke Mann Entschuldigung für die späte Antwort vergaß diesen Beitrag, aber die ListContainer existiert nicht? EDIT, fand es der listContainer ist nur der Name der Klasse xD der wichtigste. – DialUp

+0

Ich habe jetzt eine Fehlerliste.SelectedIndex + = uninstallSelectedItem; die Zeile, die ich in meine Methode einlege, das ist die Uninstallklasse btw nicht die form1.cs – DialUp

+0

Poste deinen ganzen Code und ich sortiere das Problem –

1

Die 2 einfachen Möglichkeiten, um darüber nachzudenken entweder

  1. Rufen Sie die Methode in der Klasse von den Event-Handler in dem Formular
  2. Haben Sie eine Methode für Ihre Klasse, die der Signatur eines Ereignishandlers entspricht, und abonnieren Sie das Ereignis.

Die erste erfordern keine große Veränderung

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

Die zweite Klasse erfordert eine bestimmte Methode zu haben, die die Unterzeichnung der Event-Handler in Ihrer Form paßt

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

Und dann in Ihrem Formular

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

Danke, dass ich vergessen habe, dass Sie Code in die ProgramsListBox_SelectedIndeChanged einfügen, es wird alles tun, sobald Sie darauf klicken. Also werde ich einfach Code in meiner anderen Klasse machen, der das Element von der Listbox deinstalliert? – DialUp

Verwandte Themen