2012-06-06 50 views
1

下面的代碼位於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

哎呀,我誤解你的問題。對於那個很抱歉。如果我現在正確理解你的問題,你有兩種形式,一種是啓動兒童形式的父母。現在,在兒童表格中輸入一些標題即可關閉它,但是您不希望它發生對嗎?在這種情況下使用代表和事件。將一個事件從父窗體連接到子窗體。當用戶在子窗體中輸入標題時,向父窗口提出事件並檢查標題是否已經存在。 – Zenwalker

+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(); 
    } 
} 
+0

嗨,我在發件人和e下面出現一條紅線,錯誤消息說:名爲'e'的局部變量不能在此範圍內聲明,因爲它會給'e'賦予不同的含義,這已經用於'父或當前'範圍表示其他 –

+0

您必須已經在方法的其他地方使用了'e'。我會使用'args'來更新答案。 –

+0

我不確定必須使用此代碼。應該將此代碼放入我的代碼中的第一個事件中:private void btnNewMovie_Click(object sender,EventArgs e){your code ....} ?? –

0

您仍然有movieForm對象。你可以再次做movieForm.ShowDialog()。 不要忘記再次使用onShow或類似方法中的值填寫編輯字段。

0

移動檢查/添加MovieForm內部代碼,然後你可以簡單地只是調用movieForm.ShowDialog()。您也可以將事件提交到添加該電影的主窗體。

1

的movieForm對象仍然在範圍,所以你仍然可以從它訪問任何公開的數據。我假設movieForm.GetTitle正確返回。所有你現在需要做的是應用以下校正因爲此刻你只是在列表中的第一個冠軍頭銜比較您的標題:

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

這應該解決您的問題。

編輯:好吧,我誤解你的問題。您希望表單保持打開狀態,以便用戶可以進行更正。可能的解決方案:

  • 解決方案1 ​​:通過參數的構造函數在movieManager對象爲MovieForm傳遞。這樣你可以在關閉表單之前檢查列表(在按鈕的單擊事件上)。
  • 解決方案2:創建,讓你不初始化它需要一個靜態MovieManager.GetMovieFromList方法。

我希望這是有道理的。

相關問題