как отобразить данные из Listview в текстовом поле?

#c# #winforms

#c# #winforms

Вопрос:

Я пишу приложение для телефонной книги.

У меня есть listview, в котором вы можете просматривать сохраненные данные в базе данных. Я хочу добавить опцию редактирования.

Более конкретно: когда я отмечаю строку в таблице с подписчиками и номерами телефонов и нажимаю кнопку Редактирования, на экране отображается окно с двумя текстовыми полями. В первом текстовом поле указывается имя, а во втором — номер телефона отмеченной записи.

Можете ли вы сказать мне, как это сделать?

Ответ №1:

вы можете сделать так…

Да, но TextBox и ListView находятся в разных окнах, и я не могу получить к ним доступ друг к другу

в form2 перетащите два текстовых поля и сделайте вот так….

Просто создайте свойство в классе Form2 и установите его перед отображением Form2.

 public class Form2
{
    public string Name
    {
        get { return textbox1.Text; }
        set { textbox1.Text = value; }
    }
    public string phonenumber
    {
        get { return textbox2.Text; }
        set { textbox2.Text = value; }

    }

 }

public class Form1
{

  private void btnedit_Click(object sender, eventargs e)
  {
      for (int i = 0; i < lv.Items.Count; i  )
      {
        // is i the index of the row you selected?
        if (lv.Items[i].Selected == true)
        {  
          //I show here the second field text (SubItems[1].Text) from the selected row(Items[i]) 
                Message.Show(lv.Items[i].SubItems[1].Text);
                break;
        }            
      }
      Form2 frm2 = new Form2();
      frm2.Name= text1;
      frm2.phonenumber = text2;
      frm2.Show();
      this.Hide();  //// if you want to hide the form1
    }
  }
}
  

Надеюсь, это вам поможет….

Комментарии:

1. Я сделал это и скомпилировал его без проблем, но когда я нажимаю кнопку редактирования, я получаю исключение: «InvalidArgument = Значение ‘2’ недопустимо для ‘index’. Имя параметра: индекс» для этой строки string number = listView.SelectedItems[0].SubItems[2].Text;

2. @Владислав Найденов Я отредактировал свой ответ, взгляните на мой ответ

3. Большое спасибо. Я обнаружил ошибку. Я меняю значения индексов подпунктов, и это работает.

Ответ №2:

используйте событие щелчка мыши, например,

 private void ListBox1_MouseClick(System.Object sender, System.Windows.Forms.MouseEventArgs e)  
{    
    this.TextBox1.Text = this.ListBox1.SelectedItem;
}
  

Комментарии:

1. Да, но TextBox и ListView находятся в разных окнах, и я не могу получить к ним доступ друг к другу.

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