/// <summary>
        /// Processes dialog-key events (escape, tab, etc.).
        /// </summary>
        /// <param name="sender">The sender.</param>
        /// <param name="keyEventArgs">
        /// The <see cref="System.Windows.Forms.KeyEventArgs"/> instance containing the event data.
        /// </param>
        protected override void ProcessTextAreaKey(object sender, KeyEventArgs keyEventArgs)
        {
            if (!Visible)
            {
                return;
            }

            switch (keyEventArgs.KeyData)
            {
            case Keys.Home:
                _completionListView.SelectItem(0);
                keyEventArgs.Handled = true;
                return;

            case Keys.End:
                _completionListView.SelectItem(_completionListView.ItemCount - 1);
                keyEventArgs.Handled = true;
                return;

            case Keys.PageDown:
                _completionListView.PageDown();
                keyEventArgs.Handled = true;
                return;

            case Keys.PageUp:
                _completionListView.PageUp();
                keyEventArgs.Handled = true;
                return;

            case Keys.Down:
                _completionListView.SelectNextItem();
                keyEventArgs.Handled = true;
                return;

            case Keys.Up:
                _completionListView.SelectPrevItem();
                keyEventArgs.Handled = true;
                return;

            case Keys.Tab:
                InsertSelectedItem('\t');
                keyEventArgs.Handled = true;
                return;

            case Keys.Return:
                InsertSelectedItem('\n');
                keyEventArgs.Handled = true;
                return;
            }
            base.ProcessTextAreaKey(sender, keyEventArgs);
        }