2

下面的代码在 MainFrame.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);
        }

    }
}
4

4 回答 4

3

您有机会取消表格关闭:

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();
    }
}
于 2012-06-06T15:22:01.970 回答
1

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

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

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

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

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

我希望这是有道理的。

于 2012-06-06T15:20:13.240 回答
0

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

于 2012-06-06T15:18:54.040 回答
0

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

于 2012-06-06T15:19:03.427 回答