2017-01-19 111 views
1

我已經在一個窗體上創建了一個按鈕,我在其中以編程方式設置了返回值,如下所示。首先,是事件處理程序psudocode,然後是對話結果返回的位置。對話框結果設置返回值

有一個默認屬性,可以在用戶界面中設置按鈕的返回行爲,即對話框結果行爲。在我的完整代碼中,我無法看到任何設置或修改此按鈕的返回值。

第一次在代碼執行過程中使用buttonSaveSet_Click事件處理程序進行測試(以調試模式運行)時,儘管單擊了「設置」按鈕,但返回的對話框結果值爲「取消」。但是,第二次執行該功能時,通過按下相同的按鈕,對話框結果返回爲「是」。

看起來好像有另一個地方,對話框結果正在修改,我在不正確的位置設置該值。

psudo code 
    private void buttonSaveSet_Click(object sender , EventArgs e) 
    { 
     setChars = new setChars(); 
     //set the dr to yes. 
     buttonSaveSet.DialogResult = DialogResult.Yes; 

     // set the charCount 
     // set the rowCount 

     if (conditional statement is true) 
     { 
      //return values; 
     } 

     else 
     { 
      //return nothing; 
     } 
     Close(); 
    } 

返回地點:

   try 
     { 
      DialogResult dResult = setValPopup.ShowDialog(); 
      SetChars sc = setValPopup.setChars; 
      int max; 

      if (dResult == DialogResult.Yes) 
      { 
       if (sc.set == true) 
       { 
        //do other work 
       } 
      } 
     } 
+0

在執行OnClick之前,按鈕DialogResult被複制到form.DialogResult之後。在結束表格之前改變它是晚了。嘗試設置form.DialogResult而不是button.DialogResult。 – Ralf

回答

0

您應該設置表單的DialogResult屬性以退出。任何價值,但DialogResult.None將強制形式關閉並返回無論你爲DialogResult的設置(在表格上,而不是在按鈕)

private void buttonSaveSet_Click(object sender , EventArgs e) 
{ 
    setChars = new setChars(); 
    this.DialogResult = DialogResult.Yes; 
    .... 
    // No need to call Close here 
    // Close(); 
} 

您觀察到的行爲是由於這樣的事實,可能是發動機形式在進入click事件之前檢查按鈕的DialogResult屬性,並且不希望在事件退出時重新評估它。因此,您的第一次點擊會在按鈕上設置屬性,在第二次點擊按鈕上的屬性時會被表單引擎記錄下來,一切都將關閉。

+0

史蒂夫,那是做的。感謝您的幫助。我最終刪除了close()方法,返回的結果是「是」,正如我預期的那樣。這是我懷疑的一件事,在價值變化被記錄之前關閉的表格,但我沒有太多的注意。 – WholeMilk32

0
根據您decribing行爲

。很可能您已在設計器上設置DialogResult屬性集,因此它第一次執行時會運行設置器上設置的任何值,並在以下執行時按預期正確運行。

看看你的設計師,你會發現問題。

+0

這就是我最初的想法。我看着設計師,我沒有發現任何會改變結果的東西。當我使用用戶界面設置返回值時,會添加一行代碼「this.buttonSaveSet.DialogResult = System.Windows.Forms.DialogResult.Yes;」修改了對話結果。也許這就是你的意思?儘管謝謝你的回答!我很感激幫助。 – WholeMilk32