在关闭表单之前进行检查
本文关键字:进行检查 表单 | 更新日期: 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()
即可。 您还可以将事件引发到添加影片的主窗体。