Laden...

event zur (de)aktivierung eines button

Erstellt von antoschka vor 16 Jahren Letzter Beitrag vor 16 Jahren 1.333 Views
A
antoschka Themenstarter:in
371 Beiträge seit 2007
vor 16 Jahren
event zur (de)aktivierung eines button

Hallo,
ich habe ein Form mit ListView, TreeView, PropertyGrid und buttons.
Jetzt würde ich gern bei der Auswahl eines EIntrages in ListView den Button aktivieren und falls nichts ausgewählt ist deaktivieren.
Habe mit Enter und Leave herum probiert, aber wenn man dann auf den aktivierten button klickt wird er kurz vorher deaktiviert, da man ja das ListView verlässt.
Auch ItemSelectionChanged tut nicht, da es nicht reagiert , wenn man das ListView verlässt.

Ich bin jetzt bei einem Timer gelandet, der aller 0,5 sek checked ob im ListView etwas ausgewählt ist und in abhängigkeit davon den Button (de)aktiviert.
Funktioniert zwar - ist aber irgendwie hässlich. Gibt’s a noch etwas anderes.

Betsen Dank

antoschka

915 Beiträge seit 2006
vor 16 Jahren

Hrm, standardmäßig ist der Button deaktiviert.


    private void OnSelectedIndexChanged(object sender, EventArgs e)
        {
            this.<Button>.Enabled = this.<ListView>.SelectedIndices.Count > 0;
        }

Wie vernichtet stand Andreas unter den flammenden Augen seiner Kunden.
Ihm war's, als stünde des Schicksals dunkle Wetterwolke über seinem Haupte X(

A
antoschka Themenstarter:in
371 Beiträge seit 2007
vor 16 Jahren

Ja habe ich auch probiert, aber das ding erkennt nicht wenn man den ListView verlässt und woanders herumklickt. Es reagiert nur auf Auswahlsveränderungen innerhalb des ListView.

915 Beiträge seit 2006
vor 16 Jahren

Verstehe dein Problem nicht so wirklich 🙂

Es ist klar das die Events nur geschmissen werden auf Control Seite.

Nur dein Button ist doch standardmäßig Enable = false (sprich klickst das Ding im Designer an und schaltest es schon von vornerein auf Button.Enabled = false). Erst wenn man etwas anklickt in der ListView wird der Button.Enable = true. Und wenn man durch irgendeine Aktion z.B. die ListView leert kann man da ebenso wieder reagieren.

Daher, welchen Anwenderfall gibt es den sonst das da genau dieses Problem auftritt?

Wie vernichtet stand Andreas unter den flammenden Augen seiner Kunden.
Ihm war's, als stünde des Schicksals dunkle Wetterwolke über seinem Haupte X(

A
antoschka Themenstarter:in
371 Beiträge seit 2007
vor 16 Jahren

button standardmäßig false
user klickt auf eintrag in listview
button true
user klickt auf anderes Control z.B. TreeView button sollte false sein, da kein Eintrag mehr ausgewählt ist.
Wenn der User den ListView verlässt um auf den Button zu drücken sollte dieser aber natürlich nicht false gesetzt werden.
Habe schon lange gegrübelt aber nix gefunden.

915 Beiträge seit 2006
vor 16 Jahren

Achso, schau mal ob beim ListView die Eigenschaft HideSelection auf true gestellt hast und setz es wieder auf den Default false.

Wie vernichtet stand Andreas unter den flammenden Augen seiner Kunden.
Ihm war's, als stünde des Schicksals dunkle Wetterwolke über seinem Haupte X(

A
antoschka Themenstarter:in
371 Beiträge seit 2007
vor 16 Jahren

bei mir war der default true. Aber das löst natürlich einiges. Jedoch wird durch den Button ein Fenster geöffnet. Wenn man dies mit Cancel verlässt ist im ListView nichts ausgewählt, der button aber enabled.

So richtig tut noch nicht

antoschka

915 Beiträge seit 2006
vor 16 Jahren

Na ja, du kannst beim Click auf den Button diesen immer auf disable Stellen. Da der Focus von der ListView dann soweiso dann flöten geht.

Sprich OnClick -> disable button -> öffne dialog.

Wie vernichtet stand Andreas unter den flammenden Augen seiner Kunden.
Ihm war's, als stünde des Schicksals dunkle Wetterwolke über seinem Haupte X(

A
antoschka Themenstarter:in
371 Beiträge seit 2007
vor 16 Jahren

Das müsste ich dann aber auf jeden Button legen, da das gleiche Phänomen auch passiert, wenn andere Buttons gedrückt werden und sich entsprechende Dialoge öffnen.

Habs jetzt im Form-Activate-Event eingabut:


private void frmIntervall_OnActivated(object sender, EventArgs 
{
     this.btnEmployeeActivateDeactivate.Enabled = (this.lvwEmployee.Focused && this.lvwEmployee.SelectedIndices.Count > 0) ? true : false;
}

Besten Dank für die Hilfe mit Deinem Tipp klappt es jetzt tadellos.

antoschka