從VS2002 升級到VS2005 所遇到的怪現象

從VS2002 升級到VS2005 所遇到的怪現象

最近又再度試著把公司的ERP系統從VS2002升級至VS2005,運用升級精靈的過程中是沒遇到什麼問題,也沒花多少時間,讓我一時有了"無痛升級"的感覺,執行試跑後,痛開始來了,怎麼輸入了一個代號,沒有自動帶出名字,從Debug模式中去看,事件有觸發啊,怎麼會沒帶出名字,只好Step by Step的一行一行跑,結果發現了一行很玩味的情況.

 

以下這幾段程式碼為重現問題範例 :

        private void Form1_Load(object sender, System.EventArgs e)
        {
            DataTable dt = new DataTable("Test");
            dt.Columns.Add("AA",typeof(string));
            dt.Columns.Add("BB", typeof(string));
            for (int i = 1; i < 6;i++ )
            {
                DataRow dr = dt.NewRow();
                dr["AA"] = "A" + i.ToString();
                dr["BB"] = i.ToString();
                dt.Rows.Add(dr);
            }
            DataGrid1.DataSource = dt;
            dataGridTextBoxColumn1.TextBox.Validated+=new EventHandler(TextBox_Validated);
        }

        void TextBox_Validated(object sender, EventArgs e)
        {
            int r = DataGrid1.CurrentRowIndex;
            MessageBox.Show(DataGrid1[r, 0].ToString()+" "+ ((TextBox)sender).Text.Trim());
        }

 

在表單載入時,先放入測試資料到DataGrid1裡,所以執行後,會看到下面這個畫面:

image

 

VS2002與VS2005在這表單軟入部份都沒有問題,而差異點在TextBox_Validated這個事件內.如果我把左上第一個欄位的值改為BB後,VS2002跟VS2005所MessageBox.Show出來的結果是不同的.

VS2002 所 Show的值:

DataGrid1[r,0].ToString()  ==> A1

((TextBox)sender).Text.Trim() ==> BB

 

VS2005 所 Show的值:

DataGrid1[r,0].ToString()  ==> BB

((TextBox)sender).Text.Trim() ==> BB

 

同樣的DataGrid1[r,0].ToString()在同樣的Validated事件內,抓到的值是不一樣的,VS2002所帶出來的值也因此,我原本會帶出的名稱,為此因素,所以名稱就沒帶出來了.

 

另一個問題也很奇怪,在VS2002內,在Cell內,不論是用方向鍵去換Cell,還是Tab鍵,Enter鍵,還是滑鼠去點任一Cell,都會觸發Validated事件,而VS2005大部份也會觸發,只有"Enter鍵"不會Validated事件,這讓人很不解,程式碼都一樣,但結果是不同的.

 

看來後面還會有不少的痛......