Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > Интересный факт с сombobox


Автор: sobik 15.4.2008, 18:33
сделал небольшое приложение с комбобоксом, вот его описание:
Код

            // 
            // comboBox1
            // 
            this.comboBox1.FormattingEnabled = true;
            this.comboBox1.Items.AddRange(new object[] {
            "[-C-]",
            "[-D-]",
            "[-\\-]"});
            this.comboBox1.Location = new System.Drawing.Point(14, 43);
            this.comboBox1.Name = "comboBox1";
            this.comboBox1.Size = new System.Drawing.Size(50, 21);
            this.comboBox1.TabIndex = 4;
            this.comboBox1.Text = "[-C-]";
            this.comboBox1.SelectedIndexChanged += new System.EventHandler(this.comboBox1_SelectIndexChanged);


обработчик изменения индекса:

Код


private void comboBox1_SelectIndexChanged(object sender, EventArgs ea)
        {
            listView1.Clear();        
            if (comboBox1.SelectedIndex == 0)
            {
                string path = "c:\\";
                List<string> dirs = new List<string>(Directory.GetDirectories(path));
                List<string> files = new List<string>(Directory.GetFiles(path));
                dirs.Sort();
                files.Sort();
                foreach (string dirName in dirs)
                {
                    listView1.View = View.List;
                    listView1.Items.Add(Path.GetFileName(dirName) + "\\");
                    listView1.Alignment = ListViewAlignment.SnapToGrid;

                }
                foreach (string fileName in files)
                {
                    listView1.View = View.List;
                    listView1.Items.Add(Path.GetFileName(fileName));
                }
            }
        }

При таком обработчике все нормально - comboBox1.SelectedIndex == 0, когда я выбираю первый пункт комбобокса, как и ожидалось.
Начинаю химичить с сomboBox1.SelectedText:
Код


private void comboBox1_SelectIndexChanged(object sender, EventArgs ea)
        {
            listView1.Clear();         
            if (comboBox1.SelectedText == ''[-C-]")
            {
                string path = "c:\\";
                List<string> dirs = new List<string>(Directory.GetDirectories(path));
                List<string> files = new List<string>(Directory.GetFiles(path));
                dirs.Sort();
                files.Sort();
                foreach (string dirName in dirs)
                {
                    listView1.View = View.List;
                    listView1.Items.Add(Path.GetFileName(dirName) + "\\");
                    listView1.Alignment = ListViewAlignment.SnapToGrid;

                }
                foreach (string fileName in files)
                {
                    listView1.View = View.List;
                    listView1.Items.Add(Path.GetFileName(fileName));
                }
            }
        }
       }

comboBox1.SelectedText == "".Хотя должно comboBox1.SelectedText == "[-C-]", так как был выбран именно этот пункт.
Но:
Код


private void comboBox1_SelectIndexChanged(object sender, EventArgs ea)
        {
            listView1.Clear();  
            MessageBox.Show(comboBox1.SelectedText);       
            if (comboBox1.SelectedText == ''[-C-]")
            {
                string path = "c:\\";
                List<string> dirs = new List<string>(Directory.GetDirectories(path));
                List<string> files = new List<string>(Directory.GetFiles(path));
                dirs.Sort();
                files.Sort();
                foreach (string dirName in dirs)
                {
                    listView1.View = View.List;
                    listView1.Items.Add(Path.GetFileName(dirName) + "\\");
                    listView1.Alignment = ListViewAlignment.SnapToGrid;

                }
                foreach (string fileName in files)
                {
                    listView1.View = View.List;
                    listView1.Items.Add(Path.GetFileName(fileName));
                }
            }
        }
       }

Теперь все ок(comboBox1.SelectedText == ''[-C-]"), хотя я всего лишь добавил мэссеэджбокс перед if'ом.

Может, кто-то знает этому обьяснение?

Автор: vponomarov 15.4.2008, 20:28
Код

if (comboBox1.SelectedText == ''[-C-]")


вместо открывающей двойной кавычки у тебя стоят две одинарные  smile 

Автор: Freak_FB 15.4.2008, 21:00
Используй лучше SelectedIndex. И стиль списка DropDownList. Чтобы не уподобляться написателям китайских утилит  smile . Поскольку кода, определяющего введённую вручную строку у тебя нет (и, наверное, не будет).

vponomarov, код sobik'а, наверное, писался на коленке.  smile А то что он предоставил и в самом деле работает дико

Автор: sobik 16.4.2008, 14:51
vponomarov, то опечатка(в браузере писал)
правильно: 
Код

if(comboBox1.SelectedText == "[-C-]")

Но меня ве равно интерисует, как наличие мессеждбокса влият на работу этого оператора

Автор: botusai 18.4.2008, 19:23
Текст в комбобксе меняется, когда с этого комбобкса уходит фокус, ну или ты Enter нажмешь после ввода текста. Вообще, если комбик не DropDownList,а DropDown, то лучше ввод информации в него обрабатывать на каком-нибудь KeyDown событии. MessageBox.Show() кстати и убирает фокус с комбика. Ну или я гоню

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)