none
請問 Tabpage 在 Validationg 事件中使用 訊息事窗照成 Button 事件失效 RRS feed

  • 問題

  • 各位好:

         

          我寫了一個 Window From ,我放了一個 TabControl 並放了一個 Button 到 TabPage1 裡

    我寫了以下的程式

     

    Code Snippet

    private void tabPage1_Validating(object sender, CancelEventArgs e)
    {
         MessageBox.Show("xx");    
         e.Cancel = true;
    }     

    private void button1_Click(object sender, EventArgs e)
    {
         MessageBox.Show("ddd");
    }

     

     

    結果發現

     

    如果在 Validating 裡面沒有 MessageBox.Show 的話是正常的

     

    可是在 Validating 裡面有 MessageBox.Show 的情況下

    如果是按視窗上右上方的 叉叉  的話 Button1 要按兩下才會顯示 訊息視窗

     

    如果是按 TabPage2 的標韱的話

    Button1 的 onClick 的事件會完全失效

     

    請問有人遇到這個問題嗎?

    2008年7月4日 上午 12:19

解答

所有回覆

  •   不好意思~我看不太懂你的描述,可以在描述的清楚一點嗎?但是我看你的Code會發生事件失效的原因,猜想可能是出在tabPage1_Validating 的事件中你有做了一個動作,[e.Cancel = true;],這是取消事件繼續執行的屬性,會讓你的Focus一直保持在tabPage1上離不開,所以程式的執行緒無法跳離到另一個事件中(執行續執行是一個線性執行),所以雖然你有點選到別的事件去,但是由於執行限制的關係[e.Cancel = true;]可能會讓你的事件失效,建議你將[e.Cancel = true;]用一個條件是包起來,例如驗證不通過時。

      但是實際狀況我也不是很清楚,因為我看不太懂你的描述,所以麻煩你再把描述的部分補強一下,謝謝。

    2008年7月4日 上午 02:17
  • stanley.hsu 你好:

          

            上面所貼的程式碼是針對我提出來的問題所寫的,所以看起來有點不合乎邏輯,

    我主要要問的是當我要離開 tabPage1 時如果 Validating 的事件中在我需要設定 e.Cancel = true 的情況下,

    如果有使用到 MessageBox 這個元件就會有我所描述的問題產生,如果沒有就反之。

     

    當 e.Cancel = true 時應該是中斷目前在處理的及將要處理事件,而不會引響到別的元件去觸發事件吧

       

     

    2008年7月4日 上午 03:04
  • 可能我描述的有點問題,[e.Cancel = true]是中斷目前在處理的及將要處理事件,但是你的事件是Validating這個驗證事件是觸發在當你編輯完,Focus要離開控制項時系統要進行驗證時的事件,而你又把事件繼續執行的屬性取消,所以你的Focus 要離開的事件就取消了,你可以把這個事件改變成Validated,這是當驗證結束時所觸發的事件。還有你的描述說"如果有使用到 MessageBox 這個元件就會有我所描述的問題產生",我不太明白的是你之前的描述[描述的問題],很抱歉可以敘述的清楚一些嗎?

    2008年7月4日 上午 03:16
  •  

    你好:

          

          這個程式就是要把 Focus 離開的事件取消,不讓程式到 tabPage2

    現在問題主要是在問 在 tabPage1 中 使用 MessageBox.Show 所照成的錯誤

     

    我的 FORM 中有 一個 TABCONTROL 在 TABCONTROL 中有 TABPAGE1 及 TABPAGE2

    在 TABPAGE1 中放置一個 BUTTON

    以上是我的畫面配置

     

    我的 BUTTON.CLICK 事件中只會跳出 ddd 的訊息

     

    正常狀況:

           當我要從 TABPAGE1 跳到 TABPAGE2 跳

    會觸發 TABPAGE1 的 Validating 事件 ,在事件中我會下  e.Cancel = true 讓 TabPaqe 維持在 TabPage1

    然後此時按下 TabPage1 裡面的 Button ,會觸發 Button.OnClick 事件 顯示 ddd 的訊息

     

    問題狀況:    

           當我要從 TABPAGE1 跳到 TABPAGE2 跳

    會觸發 TABPAGE1 的 Validating 事件 ,在事件中我會下  e.Cancel = true 並且在 Validating 中加入 MessageBox.Show("xxxx") ,所以跳的時候會顯示 xxxx 的訊息然後面畫會停留在TabPage1,然後此時按下 TabPage1 裡面的 Button ,不會觸發 Button.OnClick   

     

    2008年7月4日 上午 03:46
  • 現在改用 TabControl.Selecting 去達到我要的功能

    謝謝

    2008年7月4日 上午 05:08