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 に答える