在关闭表单之前进行检查

本文关键字:进行检查 表单 | 更新日期: 2023-09-27 18:36:21

下面的代码在大型机中.cs它打开并检查MovieForm.cs。我想在将新电影添加到列表之前检查输入的电影标题是否已存在。但问题是,如果标题已经存在并且出现消息框,则 MovieForm.cs 已经关闭并且所有其他数据都消失了,用户无法将标题更改为另一个标题!这可以通过其他不复杂的方式完成吗?有没有办法停止关闭表单?谢谢!

private void btnNewMovie_Click(object sender, EventArgs e)
{
    movieForm = new MovieForm();
    if (movieForm.ShowDialog() == DialogResult.OK)
    {
        if (!movieManager.GetMovieFromList(index).Split(',')  [0].Equals(movieForm.GetTitle))
        {
            movieManager.AddNewMovieToMediaLibrary(movieForm.GetNewMovie); // Anropar properties i objektet movieManager
            UppdateListboxOfMovies(); 
        }
        else
        {
            MessageBox.Show("Det finns redan en film med titeln " + movieManager.GetMovieFromList(index).Split(',')[0], "Ooops!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
        }
    }
}

在关闭表单之前进行检查

您有机会取消表单关闭:

private void btnNewMovie_Click(object sender, EventArgs e)
{
    using (var movieForm = new MovieForm())
    {
        movieForm.Closing += (s, a) =>
            {
                if (movieForm.DialogResult == DialogResult.OK)
                {
                    if (!movieManager.GetMovieFromList(index).Split(',')  [0].Equals(movieForm.GetTitle))
                    {
                        movieManager.AddNewMovieToMediaLibrary(movieForm.GetNewMovie); // Anropar properties i objektet movieManager
                        UppdateListboxOfMovies(); 
                    }
                    else
                    {
                        MessageBox.Show("Det finns redan en film med titeln " + movieManager.GetMovieFromList(index).Split(',')[0], "Ooops!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                        // Prevent the form from closing and let the user try again
                        a.Cancel = true;
                    }
                }
            };
        movieForm.ShowDialog();
    }
}

movieForm 对象仍在作用域中,因此您仍然可以从中访问任何公共数据。 我假设movieForm.GetTitle正确返回。 您现在需要做的就是应用以下更正,因为目前您只是将标题与列表中的第一个标题进行比较:

if (!movieManager.GetMovieFromList(index).Split(',').Contains(movieForm.GetTitle))
  ...

这应该可以解决您的问题。

编辑:好的,我误解了你的问题。 您希望窗体保持打开状态,以便用户可以进行更正。 可能的解决方案:

  • 解决方案 1:通过参数化构造函数将 movieManager 对象传递到 MovieForm 中。 这样,您可以在关闭表单之前检查列表(在按钮的单击事件上)。
  • 解决方案 2:创建一个静态的 MovieManager.GetMovieFromList 方法,以便不需要实例化它。

我希望这是有道理的。

您仍然拥有 movieForm 对象。你可以再做一次movieForm.ShowDialog()。不要忘记使用 onShow 或类似方法中的值再次填写编辑字段。

在 MovieForm 中移动检查/添加代码,然后您只需调用 movieForm.ShowDialog() 即可。 您还可以将事件引发到添加影片的主窗体。