Замена элемента в ListBox

есть ListBox, в который добавляются: Имя, Фамилия, Почта. Нужно по нажатию на элемент ListBox'a заменить его значение. PS При нажатии на кнопку "Добавить" появляется новое окно с тремя компонентами TextBox, в которые вводятся данные, при нажатии на кнопку "Применить" введенные данные добавляются в ListBox Код User.cs

public class User
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Email { get; set; }
}

Код MAINFORM.cs

 public partial class MainForm : Form
{
    public MainForm()
    {
        InitializeComponent();
    }

    private void MainForm_Load(object sender, EventArgs e)
    {

    }

    private void usersList_SelectedIndexChanged(object sender, EventArgs e)
    {
        string userData = (string)usersList.SelectedItem;
        string[] userDataArray = userData.Split(' ');

        if (userDataArray.Length != 3)
            throw new Exception("Данные повреждены");

        User user = new User
        {
            FirstName = userDataArray[0],
            LastName = userDataArray[1],
            Email = userDataArray[2]
        };
        UserDataEditor window = new UserDataEditor(user);
        window.ShowDialog();
    }

    private void AddButton_Click(object sender, EventArgs e)
    {
        UserDataEditor window = new UserDataEditor();
        window.ShowDialog();
        User newUser = window.User;
        if (newUser != null)
            usersList.Items.Add($"{newUser.FirstName}" +
                $" {newUser.LastName} {newUser.Email}");
    }
}

Код UserDateEditor.cs

 public partial class UserDataEditor : Form
{
    public User User { get; private set; } = null;
    public UserDataEditor(User user = null)
    {
        InitializeComponent();

        if (user != null)
        {
            User = user;

            userFirstNameEditor.Text = User.FirstName;
            userLastNameEditor.Text = User.LastName;
            userEmailEditor.Text = User.Email;
        }
    }

    private void AcceptButton_Click(object sender, EventArgs e)
    {
        User = new User
        {
            FirstName = userFirstNameEditor.Text,
            LastName = userLastNameEditor.Text,
            Email = userEmailEditor.Text
        };
        this.Close();
    }

MainForm

UserDateEditor


Ответы (1 шт):

Автор решения: Aziz Umarov

ответ на первый вопрос (по нажатию на элемент ListBox'a заменить его значение)

 UserDataEditor window = new UserDataEditor(user);
 window.ShowDialog();

не хватает обработки

User updatedUser = window.User;
...

во втором при нажатии на кнопку "Применить" если делаете ShowDialog(), то пользуйтесь DialogResult для понимания события от закрытия формы.

Смотрите на примеры тут и тут

→ Ссылка