Soru & Cevap

Autoxcompletebox keydown fonksiyonu çalışmıyor

12.11.2013 - 09:42

Merhabalar. Elinde bir autocompletebox var. Amacım autocomplete box içinde iken enter tuşuna basıldığında bir fonksiyon çalıştırmak. Aşağıdaki kodu denedim;

private void autocompletebox1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.Key == Key.Enter)
            {
               // çalıştırılacak kod

            }
        }

herhengi bir hata almıyorum. Exception da gelmiyor ancak entera bastığımda hiçbirşey olmyor. Bunu nasıl yapabilirim?

17 Görüntülenme

1 Cevap

Sitedeki sorulara cevap verebilmek için giriş yapın ya da üye olun.

picture-472-1375079047.jpg
mehmet.altiparmak
12.11.2013 - 10:43

Merhaba Ömer, 

KeyDown event'i AutoCompleteMessage içerisinde handle edildiği için senin koduna ulaşmadan kesiliyor. AutoCompleteBox kodunu incelersen aşağıdaki gibi handle edilmiş, basılan tuş Enter olduğu durumda e.Handled = true; yapılarak sana ulaşması engelleniyor.  Daha önceki soruda gönderdiğim sınıfı en alt kısımda olduğu gibi değiştirirsen Enter tuşlarını da yakalayabilirsin. Ancak AutoCompleteBox içerisindeki OnKeyDown çalışmadan senin kodun çalışacağı için bazı şeyler eksik kalabilir. 

protected override void OnKeyDown(KeyEventArgs e)

        {
            if (e == null)
            {
                throw new ArgumentNullException("e");
            }

            base.OnKeyDown(e);

            if (e.Handled || !IsEnabled)
            {
                return;
            }

            // The drop down is open, pass along the key event arguments to the
            // selection adapter. If it isn't handled by the adapter's logic,
            // then we handle some simple navigation scenarios for controlling
            // the drop down.
            if (IsDropDownOpen)
            {
                if (SelectionAdapter != null)
                {
                    SelectionAdapter.HandleKeyDown(e);
                    if (e.Handled)
                    {
                        return;
                    }
                }

                if (e.Key == Key.Escape)
                {
                    OnAdapterSelectionCanceled(this, new RoutedEventArgs());
                    e.Handled = true;
                }
            }
            else
            {
                // The drop down is not open, the Down key will toggle it open.
                if (e.Key == Key.Down)
                {
                    IsDropDownOpen = true;
                    e.Handled = true;
                }
            }

            // Standard drop down navigation
            switch (e.Key)
            {
                case Key.F4:
                    IsDropDownOpen = !IsDropDownOpen;
                    e.Handled = true;
                    break;

                case Key.Enter:
                    OnAdapterSelectionComplete(this, new RoutedEventArgs());
                    e.Handled = true;
                    break;

                default:
                    break;
            }
        }

 

public class CustomAutoCompleteBox : AutoCompleteBox
    {
        public IEnumerable FilteredItemsSource
        {
            get { return SelectionAdapter.ItemsSource; }
        }


        protected override void OnKeyDown(KeyEventArgs e)
        {
            if (e.Key == Key.Enter)
            {
                
            }
            base.OnKeyDown(e);
        }
    }