IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: WPF comboBox - provedení kódu po stisknutí Enteru

Aktivity
Avatar
Martin Turner:14.10.2015 10:07

Zdravím,

mohl bych požádat o pomoc?
Snažím se vytvořit aplikaci, kde editovatelný ComboBox je plněn pomocí Bindingu a události PropertyChange­dEventHandler PropertyChanged z kolekce ObservableCollec­tion<>().

<ComboBox Name="projektComboBox" IsEditable="true" IsReadOnly="false" IsEnabled="true" ItemsSource="{Binding ZadaneProjekty}" KeyDown="zadejNovyProjekt_KeyEvent" SelectionChanged="volbaProjektu_SelectionChanged"  />

Událost KeyDown vypadá takto:

private void zadejNovyProjekt_KeyEvent(object sender, KeyEventArgs e)
{
    if (e.Key == Key.Return)
    {
        // Provedeni kodu
    }
}

Pokud mám Combobox prázdný vše funguje bez problémů, kod se provede po stiknutí Enter, ale pokud v Comboboxu už nějaké položky mám a začnu zadávat novou, který má např. stejná počáteční písmena, tak mě Combobox začne nabízet jednu s těchto existujích položek a při pokračování zadání se začne provádět kód vázaný na událost SelectionChanged ještě před stiskem Enter.

Můj cíl je toto eliminovat a neprovádět nic, dokud nestisknu Enter.
Nevím zda jsem problém popsal dost srozumitelně, kdyžtak dovysvětlím.

Moc děkuji za každou připomínku.

 
Odpovědět
14.10.2015 10:07
Avatar
Libor Šimo (libcosenior):14.10.2015 10:19

Neviem, či som ťa správne pochopil, ale ja pridávam do kolekcie nové itemy v novom okne.

Nahoru Odpovědět
14.10.2015 10:19
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Martin Turner:14.10.2015 10:36

Edituji přímo Combobox (editable = true) a když už obsahuje Items, tak mi vyplňování zafunguje našeptávač podobných položek a tím se spustí SelectionChanged dříve, než to vůbec dopíšu a stisknu Enter. Asi bych SelectionChanged potřeboval "vypnout" dokud nestisknu ten Enter.

Ty needituješ přímo Textbox, ale vkládáš do něj už kompletní řetězec?
To je taky řešení, to zvážím.
Díky.

 
Nahoru Odpovědět
14.10.2015 10:36
Avatar
Odpovídá na Martin Turner
Michal Štěpánek:14.10.2015 10:49

Napadlo mě tu proceduru vykonat ve chvíli, kdy combobox ztratí focus, tzn v události LostFocus a událost SelectionChanged zrušit.

Nahoru Odpovědět
14.10.2015 10:49
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Odpovídá na Michal Štěpánek
Martin Turner:14.10.2015 11:01

Díky.
Mohu Tě požádat o vysvětlení, jak LostFocus funguje? Z MSDN jsem to popravdě moc nepochopil.
Myslíš časové zrušebí SelectedChanged po dobu editace? Jak na to? Potřebuji v ComboBoxu potom položky vybírat a na změnu reagovat, tak nevím, zda bych o to nepřišel, kdybych SelectedChanged zrušil úplně.

 
Nahoru Odpovědět
14.10.2015 11:01
Avatar
Odpovídá na Martin Turner
Michal Štěpánek:14.10.2015 11:04

No asi takto. Teď se ti něco v kódu provede při události ComboBoxu SelectionChanged. Zkusil bych tu proceduru spuštět v události LostFocus a tu SelectionChanged bych zrušil (nebo jen zakomentoval)...
Pak když v ComboBoxu něco vybereš a stiskneš třeba tabelátor, tím se Focus přesune na jiný objekt a vykoná se "ta" procedura...
EDIT
Místo SelectionChanged bys mohl pro následné vybírání použít třeba DropDownClosed

Editováno 14.10.2015 11:06
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
14.10.2015 11:04
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Odpovídá na Michal Štěpánek
Martin Turner:14.10.2015 11:26

Zaměnil jsem pouze SelectionChanged za DropDownClosed a funguje to tak, jak potřebuji.
Chytrej, díky moc. :-D

 
Nahoru Odpovědět
14.10.2015 11:26
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 7 zpráv z 7.