下面的代码在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);
}
}
}
答案 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))
...
这应该可以解决你的问题。
编辑:好的,我误解了你的问题。您希望表单保持打开状态,以便用户可以进行更正。可能的解决方案:
我希望这是有道理的。
答案 2 :(得分:0)
您仍然拥有movieForm对象。你可以再次movieForm.ShowDialog()
。
不要忘记使用onShow或类似方法中的值再次填写编辑字段。
答案 3 :(得分:0)
将支票/添加代码移到您的MovieForm中,然后您只需拨打movieForm.ShowDialog()
即可。您还可以将事件引发到添加了电影的主窗体。