关闭表格前进行检查?

时间:2012-06-06 15:11:08

标签: c# winforms

下面的代码在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 个答案:

答案 0 :(得分: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();
    }
}

答案 1 :(得分:1)

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

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

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

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

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

我希望这是有道理的。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

将支票/添加代码移到您的MovieForm中,然后您只需拨打movieForm.ShowDialog()即可。您还可以将事件引发到添加了电影的主窗体。