Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden.
Du solltest ein Upgrade durchführen oder einen alternativen Browser verwenden.
Du solltest ein Upgrade durchführen oder einen alternativen Browser verwenden.
C# ListBox Event nicht vorhanden?
- Ersteller roker002
- Erstellt am
H
Housechen
Gast
Hier nochmal eine Liste aller Events mit Beschreibungen und Beispielen:
http://msdn.microsoft.com/de-de/library/system.windows.forms.listbox_events.aspx
http://msdn.microsoft.com/de-de/library/system.windows.forms.listbox_events.aspx
1
1668mib
Gast
Schon mal das TextChanged-Event probiert?
@BlackLine: Was hat "SelectedIndexChanged" mit dem Hinzufügen oder Entfernen von Elementen zu tun?
@BlackLine: Was hat "SelectedIndexChanged" mit dem Hinzufügen oder Entfernen von Elementen zu tun?
Zuletzt bearbeitet:
1
1668mib
Gast
Meistens? oO
Wenn am Ende ein Item hinzugefügt wird ändert sich daran gar nix. Warum denn auch? Wenn nichts selektiert ist, ändert sich gar nichts... Bringt also gar nichts.
Genauso wie mein TextChanged-Event, welches es in meinem VS2008 nicht zum Auswählen gibt...
Edit:
Das lässt sich aber doch eigentlich auch ohne Event machen, notfalls macht man halt selbst über nen Delegate nen speziellen Event-Handler dafür, wenn man selbst Dinge aus der ListBox hinzufügt oder entfernt. Schließlich sind die meisten Events ja eher Reaktionen auf Dinge von Außen, z.B. System, andere Programme, Benutzer. Aber von Außen werden nie neue Einträge kommen oder Einträge entfernt. Also überall, wo man halt dann listBox.Items.Add() und .Remove() nutzt, ruft man halt die gewünschte Methode (notfalls wie gesagt über Delegate) auf.
Edit2: @ThreadErsteller: Und Listeneintrag geändert ist was ganz anderes als "Einträge hinzugefügt" oder "Einträge entfernt".
Und wer hat eigentlich gesagt, dass es sich um eine ListBox handelt? Wäre auch nicht falsch einfach mal die verwendete Klasse zu nennen... Edit: Steht ja im Titel :-)
Wenn am Ende ein Item hinzugefügt wird ändert sich daran gar nix. Warum denn auch? Wenn nichts selektiert ist, ändert sich gar nichts... Bringt also gar nichts.
Genauso wie mein TextChanged-Event, welches es in meinem VS2008 nicht zum Auswählen gibt...
Edit:
Das lässt sich aber doch eigentlich auch ohne Event machen, notfalls macht man halt selbst über nen Delegate nen speziellen Event-Handler dafür, wenn man selbst Dinge aus der ListBox hinzufügt oder entfernt. Schließlich sind die meisten Events ja eher Reaktionen auf Dinge von Außen, z.B. System, andere Programme, Benutzer. Aber von Außen werden nie neue Einträge kommen oder Einträge entfernt. Also überall, wo man halt dann listBox.Items.Add() und .Remove() nutzt, ruft man halt die gewünschte Methode (notfalls wie gesagt über Delegate) auf.
Edit2: @ThreadErsteller: Und Listeneintrag geändert ist was ganz anderes als "Einträge hinzugefügt" oder "Einträge entfernt".
Und wer hat eigentlich gesagt, dass es sich um eine ListBox handelt? Wäre auch nicht falsch einfach mal die verwendete Klasse zu nennen... Edit: Steht ja im Titel :-)
Zuletzt bearbeitet:
- Registriert
- Dez. 2007
- Beiträge
- 2.103
es ist listbox....
ups sorry, ich meinte ja dass die länge der Liste sich geändert hat... nicht der eintrag selbst!
Es ist so, dass jeder eintrag automatisch in die DB übernohmen werden sollte. Ich wollte keine schleife verwenden. Naja aber wenn es nicht geht, werde ich einfach alle Elemente über die schleife reinquetschen.
Danke für die Antwort!
ups sorry, ich meinte ja dass die länge der Liste sich geändert hat... nicht der eintrag selbst!
Es ist so, dass jeder eintrag automatisch in die DB übernohmen werden sollte. Ich wollte keine schleife verwenden. Naja aber wenn es nicht geht, werde ich einfach alle Elemente über die schleife reinquetschen.
Danke für die Antwort!
- Registriert
- Dez. 2007
- Beiträge
- 2.103
ich übernehme von eine vordefinierte liste die gesamteinträge. hmm läuft eigentlich addrange über eine schleife? wenn ja, dann kann ich genauso gut die neue Liste füllen und in die DB schreiben, aber nicht mit addrange
H
Housechen
Gast
Kannst ja von ListBox erben, die ganzen Add- und Remove-Methoden überschreiben, die base-Methoden ausführen und dann die Items, die du ja über die Parameter bekommst, in die DB eintragen lassen. Oder du gehst hin und rufst an diesen Stellen ein Event auf.
Dann hast du halt deine eigene ListBox-Modifikation, die das alles automatisch macht.
Dann hast du halt deine eigene ListBox-Modifikation, die das alles automatisch macht.
Das ist völlig daneben. Wir brechen hier doch nicht eine Datenstruktur auf um da irgendwelche Methoden zu überschreiben nur um unsere Funktionaliät da reinzuquetschen.
Man sollte sich schon an das PRinzip der Kapselung halten.
@roker002: Was heißt bei dir "vordefiniert"?. Wenn du die Listbox an die Datenbank binden willst, dann nutze hier lieber BindingSources, die bindest du an die DB und dann arbeitest du über die Methode der Bindingsource(EndEdit(),AddNew usw...) und fügst somit die Daten in die Datenbank ein.
Aber hier die Listbox neu erfinden um die Add- und Remove Methoden anzupassen ist am Design vorbei gedacht.
Man sollte sich schon an das PRinzip der Kapselung halten.
@roker002: Was heißt bei dir "vordefiniert"?. Wenn du die Listbox an die Datenbank binden willst, dann nutze hier lieber BindingSources, die bindest du an die DB und dann arbeitest du über die Methode der Bindingsource(EndEdit(),AddNew usw...) und fügst somit die Daten in die Datenbank ein.
Aber hier die Listbox neu erfinden um die Add- und Remove Methoden anzupassen ist am Design vorbei gedacht.
Zuletzt bearbeitet von einem Moderator:
(Überflüssiges Komplettzitat entfernt.)
- Registriert
- Dez. 2007
- Beiträge
- 2.103
neee es geht garnicht um bindings.... das wäre auch gar kein Problem. Ich bastele gerade an eine "Vorlage" funktionen, die alle Änderungen in die Datenbank überträgt. Deswegen bringt es nur wenig was an den bindings zu halten wenn es dazu kein eventhandler unterstützt wird.
Mir geht es generell jetzt die Software so schnell wie möglich zu erstellen, sonst habe ich später keine Zeit
An den ganzen kann ich noch später optimierungen machen.
Aber danke für den Tipp!
Ich habe das "Problem" glaube ich im griff! Ich werde sicher noch in der Optimierungsarbeit auf das Thema zurückkommen
Mir geht es generell jetzt die Software so schnell wie möglich zu erstellen, sonst habe ich später keine Zeit
Aber danke für den Tipp!
Ich habe das "Problem" glaube ich im griff! Ich werde sicher noch in der Optimierungsarbeit auf das Thema zurückkommen
- Registriert
- März 2008
- Beiträge
- 215
Also ich denke, dass Controlling (hier die Datenspeicherung in der Datenbank) sollte von Anfang an gut da stehen, da baut auch die Datenlogik später drauf auf. Siehe MVC.
Aber da ich nicht genau weiß was du wie bewerkstelligst ist es auch etwas schwer dazu etwas zu sagen. Von daher, kann ich auch daneben liegen mit meiner Aussage, aber aus meiner Erfahrung ist das schon immer fast die halbe Miete.
Aber da ich nicht genau weiß was du wie bewerkstelligst ist es auch etwas schwer dazu etwas zu sagen. Von daher, kann ich auch daneben liegen mit meiner Aussage, aber aus meiner Erfahrung ist das schon immer fast die halbe Miete.
C
claW.
Gast
anders funktioniert es aber nicht und das ist der einzig mögliche weg. google liefert keine anderen möglichkeiten als eben die des erbens und hinzufügens.toeffi schrieb:Das ist völlig daneben. Wir brechen hier doch nicht eine Datenstruktur auf um da irgendwelche Methoden zu überschreiben nur um unsere Funktionaliät da reinzuquetschen.
claW. schrieb:anders funktioniert es aber nicht und das ist der einzig mögliche weg. google liefert keine anderen möglichkeiten als eben die des erbens und hinzufügens.
Das ist Unfug.
Du fügst deinem PRojekt die Dll WindowsBase hinzu, holst dir die beiden Namespaces mit rein
using System.Collections.ObjectModel;
using System.Collections.Specialized;
Somit kannst du danach die ObservableCollection<T> benutzen, diese Collection hinterlegst du bei der Listbox als Datenquellen
Listbox.DataSource = eineObservableCollection;
Als nächstes hängt man sich wie folgt an das CollectionChanged Event ran:
Code:
ObservableCollection<int> test = new ObservableCollection<int>();
test.CollectionChanged += (sender, eventArgs) =>
{
if(eventArgs.Action == NotifyCollectionChangedAction.Add)
Console.WriteLine("ItemAdded");
};
Hoffe das klar ist, das man dann nicht die Items in die Listbox sondern in die Liste einfügt. Da die ja als Datenquelle gebunden ist, aktuallisiert sie auch die Inhalte des Listbox.
C
claW.
Gast
gut wieder was gelernt. bastel mit c# erst seit letzter woche herum. 
Ähnliche Themen
- Antworten
- 49
- Aufrufe
- 1.977
- Antworten
- 8
- Aufrufe
- 713
- Antworten
- 6
- Aufrufe
- 708
- Antworten
- 7
- Aufrufe
- 475
- Antworten
- 7
- Aufrufe
- 6.487