2016-09-21 122 views
0

我有一個相當有趣的問題,但我是C#的新手。所以PLZ的幫助。在我的程序中有一個帶有按鈕的主窗體。當我點擊這個按鈕時,出現另一個表單。這個子窗體有一個「後退」按鈕和一個「保存」按鈕。當我點擊「保存」時保存數據並打開瀏覽器,以便我可以選擇一個文件。當我點擊「返回」時,它應該關閉子窗體。我的問題是我無法在那裏「停止」。關閉子窗體後(儘管使用「返回」),它只是繼續到主窗體中打開瀏覽器的方法,直到另一個「if」爲假。我怎樣才能讓它停在那裏? (順便說一句,開放瀏覽器方法寫在主表單中的原因是有幾個表單需要從主表單打開,所有表單都是相同的)。 編輯: 在窗體(GuaranteesForm)我有結束操作

private void btnBack_Click(object sender, EventArgs e) 
     { 
      this.Close(); 
      MessageBox.Show("No Data was saved"); 
      return; 
     }` 

然後,它前進到主要形式:

private void button8_Click(object sender, EventArgs e) 
     { 
      try 
      { 
       GuaranteesForm frm = new GuaranteesForm(Convert.ToInt32(txtProjectReferenceCode.Text), 
        txtIndent.Text, 7, ""); 
       frm.ShowDialog(); 
       lblId.Text = _entit.C02_ProjectDocuments.OrderByDescending(i => i.ID).First().ID.ToString(); 
       UploadFirst(); 
       lblId.Text = ""; 
       RefreshData(); 
      } 
      catch (Exception) 
      { } 

     } 

然後,對於該第一負載的方法:

private void UploadFirst() 
    { 

      OpenFileDialog opf = new OpenFileDialog { Multiselect = true }; 
      opf.ShowDialog(); 


      if ((opf.FileNames.Any())) 
      { 
       tempDictionary.Clear(); 

       foreach (var fileName in opf.FileNames) 
       { 
        FileInfo f = new FileInfo(fileName); 
        lstFile.Items.Add(f.Name); 
        tempDictionary.Add(f.FullName, f.Name); 
       } 
      } 
      else 
      { 

       MessageBox.Show("File Was NOT saved !"); 
       return; 
      } 

如果我按回它打開瀏覽器,然後我關閉瀏覽器,它顯示:文件不保存

+0

設置爲子窗體集合DialogResult並在主窗體中檢查是否在繼續之前取回有效的DialogResult – ASh

+1

您必須提供代碼讓我們看看如何打開和關閉子窗體。讓我們看看你的代碼 – Ogbe

回答

0

ShowDialog方法暫停當前方法,直到該對話框關閉,然後繼續暫停的方法。 btnBack_Click方法中的return聲明方法對主窗體沒有任何影響 - 您需要告訴主窗體用戶決定了什麼。這可以使用DialogResult屬性完成。

而是在對話框中使用this.Close(),使用DialogResult = DialogResult.Cancel

private void btnBack_Click(object sender, EventArgs e) 
{ 
    MessageBox.Show("No Data was saved"); 
    DialogResult = DialogResult.Cancel; // this also closes the dialog 
} 

在按鈕的事件處理程序,應該導致文件被保存,使用DialogResult = DialogResult.OK代替Close()

private void btnSave_Click(object sender, EventArgs e) 
{ 
    DialogResult = DialogResult.OK; // this also closes the dialog 
} 

然後在主窗體中,您可以根據用戶的決定採取行動:

if (frm.ShowDialog() != DialogResult.OK) 
{ 
    // bail out 
    return; 
} 

// continue showing the browser and saving the file 

PS。 Button有一個DialogResult屬性,該屬性會自動設置對話框結果,並在其值不等於DialogResult.None而不需要Click事件處理程序時關閉表單。

+0

這很好用。謝謝你,謝謝你,謝謝你。你是一個拯救生命的人! – Zoe

0

您應該在「保存」按鈕事件處理程序中調用子窗體中的uploadfirst()方法。將其從「button8」事件處理程序中的「button8」事件處理程序