Изменить ItemIndex в Comobox, когда раскрывающийся список открыт - PullRequest
3 голосов
/ 05 октября 2011

В Compact Framework я хочу изменить ItemIndex ComboBox, когда раскрывающийся список открыт. Я пытаюсь изменить его из событий LostFocus или KeyPress, и, похоже, это работает, но когда закрывающийся список закрыт, значение возвращается к исходному значению.

Например:

    private void comboBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (e.KeyChar == (char)Keys.Tab)
            return;
        if (e.KeyChar == 'A')
        {
             e.Handled = true;
             comboBox1.SelectedIndex = 2;
        }
    }

Когда я нажимаю кнопку A, фактически выбирается элемент № 2 и текст, но когда я перехожу к следующему элементу управления или просто закрываю раскрывающийся список, комбинированный список изменяет значение предыдущего.

Спасибо

1 Ответ

0 голосов
/ 25 апреля 2013

Я только что попытался повторить вашу проблему (но работает на FF) с помощью следующего кода, и он работает нормально:

using System;
using System.Windows.Forms;

namespace combotest
{
    class MainClass
    {
        public static void Main (string[] args)
        {
            WinForm form = new WinForm ();
            Application.Run (form);
            //Console.WriteLine("Hello World!");
        }
    }
    public class WinForm : Form
    {
        public WinForm ()
        {
            InitializeComponent ();
        }
        ComboBox comboBox1;
        TextBox textBox1;
        private void InitializeComponent ()
        {
            this.Width = 400;
            this.Height = 300;
            this.Text = "My Dialog";
            Button btnOK = new Button ();
            btnOK.Text = "OK";
            btnOK.Location = new System.Drawing.Point (10, 10);
            btnOK.Size = new System.Drawing.Size (80, 24);
            this.Controls.Add (btnOK);
            btnOK.Click += new EventHandler (btnOK_Click);
            comboBox1=new ComboBox();
            comboBox1.Location = new System.Drawing.Point (10, 50);
            comboBox1.Size = new System.Drawing.Size (80, 24);
            comboBox1.DropDownStyle=ComboBoxStyle.DropDownList;
            this.Controls.Add (comboBox1);

            textBox1=new TextBox();
            textBox1.Location = new System.Drawing.Point (100, 50);
            textBox1.Size = new System.Drawing.Size (80, 24);
            this.Controls.Add (textBox1);

            this.SuspendLayout();
            String[] iList=new String[]{"text0","text1","text2","text3","text4"};
            comboBox1.Items.AddRange(iList);
            comboBox1.SelectedIndex=0;
            this.ResumeLayout();            
            comboBox1.KeyPress+=new KeyPressEventHandler(comboBox1_KeyPress);
        }

        private void comboBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)Keys.Tab)
                return;
            if (e.KeyChar.ToString().ToUpper() == "A")
            {
                 e.Handled = true;
                 comboBox1.SelectedIndex = 2;
                textBox1.Text=comboBox1.SelectedItem.ToString();
            }
        }
        private void btnOK_Click (object sender, System.EventArgs e)
        {
            this.DialogResult = DialogResult.OK;
            this.Close ();
        }

    }
}

Поэтому я предполагаю, что у вас есть какой-то дополнительный код или событие, прикрепленное к comboBox, или оно действительно ведет себя по-другому в FF.

Вы можете проверить свое приложение, также работающее в FF, просто перейдя в папку bin \ Debug dir в проводнике файлов вашего ПК, а затем запустите приложение SmartDevice на ПК, дважды щелкнув exe-файл. Обычно (без специальных библиотек DLL) он также должен работать на ПК, так как CF имеет обратную совместимость с FF.

Если проблема не устранена, опубликуйте свернутый пример кода, демонстрирующий вашу проблему.

...