Покритикуйте, редактируемый ListView
От: Astellar  
Дата: 25.11.04 03:47
Оценка:
Господа, была у меня проблемк — сделать возможным ввод в ListView.
Одним из решений было динамически создавать textBox, что я и сделал.
Но в целом меня смущает некоторая корявость этого решения. в C# я новичек,
поэтому прошу Вас покритиковать нижеследуещее...

Итак.
Есть множество разных ListView. Штуки три.
Созадны посредством дизайнера.
Перехватываем следующие события в таком аспекте:

private void listViewRegions_SelectedIndexChanged(object sender, System.EventArgs e)
        {
            if(listViewRegions.SelectedItems.Count < 1)
            {
                listViewRegions.Items[prevSelectionRegions].SubItems[1].Text = tempTextBox.Text;
                tempTextBox.Hide();
                tempTextBox.Dispose();
                return;
            }
            
            DoEdit(ref prevSelectionRegions, ref listViewRegions);
        }


private void listViewRegions_Leave(object sender, System.EventArgs e)
        {
            try
            {
                listViewRegions.Items[prevSelectionRegions].SubItems[1].Text = tempTextBox.Text;
                tempTextBox.Hide();
                tempTextBox.Dispose();
                return;
            }
            catch(Exception ex)
            {
                MessageBox.Show("Непонятная, жутковатая ошибка");
            }
        }


Также имеется ф-я

private void DoEdit( ref int prevSelection, ref ListView listView)
        {
            TextBox m_tempTextBox      =    new TextBox();
            m_tempTextBox.BorderStyle = 0;
            m_tempTextBox.Size          = new System.Drawing.Size(listView.Columns[1].Width,
                                            listView.SelectedItems[0].Bounds.Height);
            m_tempTextBox.Location      = new System.Drawing.Point(listView.Columns[0].Width,
                                            listView.SelectedItems[0].Bounds.Top);
            m_tempTextBox.TabIndex      = 1;
            m_tempTextBox.Parent      = listView;
            m_tempTextBox.Text          = listView.Items[listView.SelectedIndices[0]].SubItems[1].Text;
            tempTextBox                  = m_tempTextBox;
            prevSelection              = listView.SelectedIndices[0];
                        
            m_tempTextBox.Show();
            m_tempTextBox.Focus();
            m_tempTextBox.Select(0,m_tempTextBox.Text.Length);
        }

В классе формы объявлены

private TextBox tempTextBox;                                // For listView in Load
private int prevSelectionRegions;


Вроде бы все более менее неглючно, но хотелось бы, чтобы спецы взглянули.
Спасибо большое!
Я весьма доверчив, когда речь идет о моих словах. Я верю всему, что
говорю, хотя и знаю, что я лжец.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.