我們剛剛將我們的 VS2019 開發環境從 .NET 3.5 遷移到 .NET 4.7.2 的大型(約 700 kloc)舊 Windows 表單應用程式,并遇到了一個僅使用一個 Windows 表單的問題,其中有兩個非常奇怪的問題已經浮現:
ContextMenuStrip在 a 中的單元格中右鍵單擊時出現的編碼,DataGridView在滑鼠懸停時不會自動打開其子選單(如果存在) - 需要單擊。ContextMenuStrips 在其他表單上的編碼表面上相同,表現正常。- 從有問題的表單(來自上述 ContextMenuStrip)打開另一個表單,導致該表單上的控制元件不被繪制。如果激活另一個表單,然后重新激活打開的表單,則會出現控制元件。但是,以與其他表單完全相同的方式打開相同的表單會產生預期的行為。
我意識到這里沒有什么可做的——我猜我們已經被 .net 3.5 和 4.7.2 之間的一些模糊的變化絆倒了,但 Google 博士到目前為止還沒有透露任何線索。
為了隔離問題而撕掉東西將是相當困難的 - 我們有各種繼承的控制元件和自定義網格繪制,其中大部分是功能的關鍵。我沒有嘗試構建測驗用例,因為相同的繼承控制元件(使用 DataGridView 和 ContextMenuStrip)在同一應用程式的其他地方完美地作業,創建測驗表單似乎除了正常作業之外不會做任何其他事情。
所以在這個階段,我會很感激只是知道在哪里看。
環境:Visual Studio 2019 v16.11.10,.net 4.7.2,Windows Forms 應用程式,主要用 VB.NET 撰寫,在一些類別庫中帶有一點 C#。
我嘗試過的事情:
- 大量搜索 .net 3.5 和 .net 4.7.2 之間的重大變化
- 在 DataGridView 中注釋掉相當多的自定義繪畫
- 和平臺之間
x64的切換x86AnyCpu - 為 .NET 4.8 而不是 4.7.2 編譯 - 行為沒有區別。
……一切都無濟于事。
任何想法都非常感激。我將使用任何建議的結果更新問題。
編輯:
- 更正了對 ToolStripMenu 的參考 - 正如 @dr.null 所評論的那樣,應該是 ContextMenuStrip。
- 添加了另一個測驗:為 .NET 4.8 編譯并運行 @dr.null 評論。
uj5u.com熱心網友回復:
好吧,事實證明它非常模糊。我們發現該CellPainting事件連續運行,每秒數十次。
事實證明,該CellPainting事件正在觸發該CellFormatting事件,其中一些基礎DataRow值正在更改。顯然這會重新觸發CellPainting事件,因此會觸發回圈。
僅當與已有的不同時才更改代碼以更新基礎行值,防止回圈,并因此停止連續重繪。
通過此更改,ContextMenuStrip 行為恢復正常,并且打開的表單也可以正常繪制控制元件。
沒有解釋的是為什么在我們從 .NET 3.5 遷移之前沒有這個問題。我只能假設框架之間存在一些奇怪的差異,因為所討論的代碼非常陳舊,并且已經好幾年沒有改變了。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/443392.html
標籤:表格 视觉工作室 2019 .net-3.5 .net-4.7.2
上一篇:當我在form_load中制作一個點矩陣時它可以作業,但是當我在一個單獨的類中制作它并在form_load中制作它的一個物件時它不起作用
