話框:新手第一次跑通前必知的 4 個(gè)坑)
Ookii.Dialogs.WinForms 對(duì)話框新手第一次跑通前必知的 4 個(gè)坑【免費(fèi)下載鏈接】ookii-dialogs-winformsAwesome dialogs for Windows Desktop applications built with Microsoft .NET (WinForms)項(xiàng)目地址: https://gitcode.com/gh_mirrors/oo/ookii-dialogs-winformsOokii.Dialogs.WinForms 為 WinForms 桌面應(yīng)用提供任務(wù)、憑據(jù)、進(jìn)度、輸入和 Vista 風(fēng)格文件對(duì)話框等原生級(jí)控件。本文帶你從裝環(huán)境到彈出第一個(gè)對(duì)話框繞開(kāi)新手集成時(shí)最常見(jiàn)的 4 個(gè)報(bào)錯(cuò)。先花 30 秒認(rèn)識(shí)這個(gè)項(xiàng)目項(xiàng)目?jī)?nèi)容項(xiàng)目名Ookii.Dialogs.WinForms主語(yǔ)言C#運(yùn)行環(huán)境Windows.NET 6 / .NET 5 / .NET Core 3.1 / .NET Framework 4.6.2核心能力TaskDialog、CredentialDialog、ProgressDialog、InputDialog、Vista 風(fēng)格文件對(duì)話框典型場(chǎng)景替代老式 MessageBox、選文件夾、輸入憑據(jù)、展示長(zhǎng)耗時(shí)任務(wù)進(jìn)度它只是個(gè)類(lèi)庫(kù)引用后直接調(diào)用即可。倉(cāng)庫(kù)里的示例程序就是最好的使用手冊(cè)建議開(kāi)著對(duì)照。動(dòng)手前的環(huán)境準(zhǔn)備硬性前置條件開(kāi)發(fā)機(jī)是 Windows對(duì)話框控件依賴(lài) Windows API非 Windows 平臺(tái)只能編譯、不能運(yùn)行.NET 6 及以上 SDK倉(cāng)庫(kù) global.json 要求 6.0.100 并自動(dòng)向前滾動(dòng)面向 .NET Framework 4.6.2 老項(xiàng)目時(shí)確認(rèn)目標(biāo)機(jī)器裝了 Framework 4.6.2步驟如下克隆倉(cāng)庫(kù)git clone https://gitcode.com/gh_mirrors/oo/ookii-dialogs-winforms構(gòu)建并運(yùn)行示例確認(rèn)環(huán)境沒(méi)問(wèn)題git clone https://gitcode.com/gh_mirrors/oo/ookii-dialogs-winforms cd ookii-dialogs-winforms dotnet run --project sample/net60/Ookii.Dialogs.WinForms.SampleNet60.csproj在自己的 WinForms 項(xiàng)目里裝官方包dotnet add package Ookii.Dialogs.WinForms舊版包管理器里則是Install-Package Ookii.Dialogs.WinForms。新手第一次跑起來(lái)你大概率會(huì)撞上的幾個(gè)坎編譯報(bào)錯(cuò)找不到 TaskDialog 類(lèi)型你按搜索習(xí)慣裝了 Ookii.Dialogs.WindowsForms然后new TaskDialog()一行直接標(biāo)紅找不到類(lèi)型或命名空間名稱(chēng)。別慌這不是版本問(wèn)題是包名裝反了。舊包名Ookii.Dialogs.WindowsForms已廢棄官方新包名是Ookii.Dialogs.WinForms——注意 WinForms 和 WindowsForms 拼寫(xiě)順序的差異。舊包只是項(xiàng)目里保留的一個(gè)殼工程不產(chǎn)任何程序集代碼。換成正確包名、重新 restore紅字就沒(méi)了。貼下面這段進(jìn) Program.cs 就能確認(rèn)引用生效using Ookii.Dialogs.WinForms; var d new TaskDialog { WindowTitle 集成檢查, MainInstruction 對(duì)話框可用, OKButton true }; d.ShowDialog();非 Windows 機(jī)器構(gòu)建示例冒出 NETSDK1100上面命令換到 Linux 或 macOS 上執(zhí)行dotnet build會(huì)拋 NETSDK1100Windows 目標(biāo)框架只支持在 Windows 上構(gòu)建。原因是庫(kù)和示例的 TargetFramework 都帶-windows后綴。只想跨平臺(tái)驗(yàn)證編譯的話在 csproj 里加一行EnableWindowsTargetingtrue/EnableWindowsTargeting但真正彈對(duì)話框運(yùn)行還是回 Windows 機(jī)器。點(diǎn)顯示按鈕拋出一行 NotSupportedException對(duì)話框?qū)傩远寂浜昧它c(diǎn)擊彈出的瞬間卻拋NotSupportedException。?? 原因在 TaskDialog 依賴(lài) Vista 引入的任務(wù)對(duì)話框 API實(shí)例化、設(shè)置屬性都是安全的只有 Show 時(shí)才做系統(tǒng)版本判斷并拋異常。所以調(diào)用前先查T(mén)askDialog.OSSupportsTaskDialogs為 false 時(shí)退回普通 MessageBox示例程序 就是這么寫(xiě)的。Win10/11 上你碰不到這個(gè)雷但交付環(huán)境混雜老系統(tǒng)時(shí)它就是定時(shí)炸彈。進(jìn)度對(duì)話框一打開(kāi)就把界面卡死順著習(xí)慣給 ProgressDialog 調(diào)ShowDialog()窗口彈出后界面整個(gè)鎖死——任務(wù)線程被模態(tài)窗口擋住進(jìn)度條自然永遠(yuǎn)不走。官方建議是非模態(tài)用Show()顯示對(duì)話框后臺(tái)線程更新進(jìn)度用法類(lèi)似 BackgroundWorker。前三個(gè)坑決定你能不能跑通這第四個(gè)坑決定跑通之后好不好用所以放在最后。跑通之后順手改一處把系統(tǒng)默認(rèn)的 FolderBrowserDialog 換成 VistaFolderBrowserDialog前者沒(méi)有目錄樹(shù)、界面陳舊后者才是用戶(hù)習(xí)慣的瀏覽體驗(yàn)兩行就能換完var dialog new VistaFolderBrowserDialog { Description 選擇資源目錄 }; if (dialog.ShowDialog(this) DialogResult.OK) System.Diagnostics.Debug.WriteLine(dialog.SelectedPath);從裝環(huán)境、排掉 4 個(gè)報(bào)錯(cuò)到換上第一個(gè) Vista 風(fēng)格對(duì)話框就是 Ookii.Dialogs.WinForms 的完整入門(mén)路徑。各對(duì)話框的參數(shù)細(xì)節(jié)看 README.md 的 Included dialogs 一節(jié)完整用法模式直接翻 MainForm.cs?!久赓M(fèi)下載鏈接】ookii-dialogs-winformsAwesome dialogs for Windows Desktop applications built with Microsoft .NET (WinForms)項(xiàng)目地址: https://gitcode.com/gh_mirrors/oo/ookii-dialogs-winforms創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考