1. 程式人生 > >[工作札記]03: 微軟Winform窗體中ListView、DataGridView等控制元件的Bug,會導致程式編譯失敗,影響範圍:到最新的.net4.7.2都有

[工作札記]03: 微軟Winform窗體中ListView、DataGridView等控制元件的Bug,會導致程式編譯失敗,影響範圍:到最新的.net4.7.2都有

工作中,我們發現了微軟.net WinForm的一個Bug,會導致窗體設計器自動生成的程式碼失效,這個Bug從.net4.5到最新的.net4.7.2都存在,一直沒有解決。最初是我在教學工作中發現的,後來工作的時候該Bug也常現。

  • 重現步驟:

  使用VisualStudio2013/2015/2017/2019建立一個新的Windows窗體程式(使用C#或者VB.net都可以)

  新建的預設空白的窗體程式,點選執行,可以正常執行:

  這時,我們往窗體拖一個ListView控制元件,手動新增兩列,名稱分別為Id/編號、Name/姓名:

  執行程式,報錯:

  點選錯誤詳情,發現窗體自動生成的程式碼有誤,刪除後程序正常執行:

  可是,一旦對窗體的任何控制元件進行更改(調整窗體大小,修改窗體屬性等),又會導致編譯無法通過:

  該Bug在DataGridView中也同樣出現:

 

解決方法:

  1. 聯絡微軟在下個版本中修正Bug;
  2. 不使用Name作為表格列的名稱。

題外話:

  微軟在給我們帶來便利的同時,也帶給我們很多的麻煩:)

 

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

補充:

有些朋友覺得這不是Bug,覺得不符合設計預期的不是Bug,那麼,如果設計本身就有問題呢?

我們再來一個實驗,我們把剛才那個窗體的Name屬性,改為Name:

執行程式,一切正常:

好,我們把名字改回來,再把DataGridView的屬性,改為Name,編譯,報錯了:

好,同樣都是Windows控制元件,在同樣的地方設定屬性,一個能用,一個不能用,你說這不是設計上的問題?不是Bug嗎?

——“這有兩根金條,你告訴我,哪根是高尚的?哪根是齷齪的?”