← මුල් පිටුව

WinForms විකල්ප සංසන්දනය

Majorsilence.Forms සහ .NET MAUI, Avalonia, Uno Platform, Eto.Forms, WPF සහ Wine — එක් එක් විකල්පය පවතින WinForms කේත පදනමකින් සැබවින්ම ඉල්ලා සිටින්නේ කුමක්ද.

මෙම පිටුව පරිවර්තනයකි. ඉංග්‍රීසි අනුවාදය සමඟ වෙනසක් ඇත්නම්, ඉංග්‍රීසි අනුවාදය නිවැරදි ලෙස සලකන්න. English

ඔබට ක්‍රියාත්මක WinForms යෙදුමක් ඇති අතර එය macOS හෝ Linux මත අවශ්‍ය නම්, සැබෑ ප්‍රශ්නය “හොඳම UI framework එක කුමක්ද” යන්න නොවේ — එය “මගේ පවතින කේතයෙන් කොපමණ ප්‍රමාණයක් ඉතිරි වේද?” යන්නයි. පහත සෑම විකල්පයක්ම හොඳ framework එකකි. ඒවා ඔබේ කේත පදනමෙන් ඉල්ලා සිටින්නේ ඉතා වෙනස් ප්‍රමාණයන් පමණි.

කෙටි සාරාංශය

විකල්පය UI ආකෘතිය Linux macOS Mobile / වෙබ් ඔබේ පවතින WinForms කේතයට කුමක් සිදු වේද
Majorsilence.Forms WinForms (Form, පාලකයන්, events, Designer ගොනු) ඔව් (Avalonia හෝ GTK 4) ඔව් Browser (නවකයි), Android සහ iOS (මුල් අවධිය); terminal එකක් ද තබා ගනී. Namespace වෙනසක් + ගැළපුම් ස්තරයක්; migrator එක යාන්ත්‍රික කොටස ස්වයංක්‍රීය කරයි. Windows මත, .NET Framework 4.8 ඇතුළුව, පවතින WinForms හෝ WPF යෙදුම තුළ වරකට එක් පාලකයක් ලෙස ද එය අනුගත කළ හැක
Avalonia XAML + MVVM ඔව් ඔව් ඔව් XAML views සහ view models ලෙස නැවත ලියනු ලැබේ
Uno Platform WinUI XAML + MVVM ඔව් ඔව් ඔව් WinUI XAML ලෙස නැවත ලියනු ලැබේ
.NET MAUI XAML + MVVM නිල සහායක් නැත ඔව් (Mac Catalyst) ඔව් නැවත ලියනු ලැබේ, සහ mobile-first පාලක කට්ටලයකට ගැළපෙන සේ විෂය පථය නැවත සකසනු ලැබේ
Eto.Forms එහිම forms-ශෛලීය .NET API එකක්, එක් එක් OS හි ස්වදේශීය widgets ඔව් ඔව් නැත Eto හි API එකට එරෙහිව නැවත ලියනු ලැබේ — හැඩයෙන් හුරුපුරුදුයි, නමුත් WinForms සමඟ මූලාශ්‍ර-ගැළපෙන්නේ නැත
WPF XAML + MVVM නැත නැත නැත නැවත ලියනු ලැබේ, සහ තවමත් Windows-පමණක්
Wine කිසිවක් නැත — Windows binary එක ධාවනය කරයි ඔව් ඔව් නැත ස්පර්ශ නොකෙරේ, නමුත් ඔබ බෙදා හරින්නේ ස්වදේශීය යෙදුමක් නොව අනුකරණය කළ (emulated) Windows යෙදුමකි

Majorsilence.Forms ගොඩනගා ඇත්තේ මේවායින් කිහිපයක් මතය

මෙය පැහැදිලිව කිව යුතුය, මන්ද එය සුලබ වැරදි අවබෝධයකි: Majorsilence.Forms, Avalonia, Uno Platform හෝ GTK සමඟ තරග කරන්නේ නැත. එය ඒවා භාවිත කරයි. සෑම පාලකයක්ම Majorsilence.Forms විසින්ම SkiaSharp සමඟ අඳින අතර, යටින් ඇති ධාරකය (host) — පෙරනිමියෙන් Avalonia, නැතහොත් Uno, නැතහොත් gir.core හරහා සැබෑ GTK 4 කවුළුවක් — කවුළුව නිර්මාණය කර, message loop එක ධාවනය කර, Skia පෘෂ්ඨය ඉදිරිපත් කරයි. Windows මත, එම පාලකයන්ම සැබෑ System.Windows.Forms හෝ WPF කවුළු මඟින් ද ධාරකය කළ හැකි අතර, පියවරෙන් පියවර, එම ස්ථානයේම (in-place) සංක්‍රමණයක් කළ හැකි වන්නේ එබැවිනි. වේදිකා backends බලන්න.

එබැවින් තේරීම “Majorsilence.Forms ද Avalonia ද” නොවේ. එය මෙයයි: ඔබ Avalonia හි XAML සෘජුවම ලියනවාද, නැතහොත් WinForms දිගටම ලියමින් Avalonia (හෝ GTK 4, හෝ Uno) යටිතල නළ පද්ධතිය (plumbing) ලෙස ක්‍රියා කිරීමට ඉඩ දෙනවාද?

විකල්පයෙන් විකල්පයට

.NET MAUI

Xamarin.Forms හි Microsoft හි නිල බහු-වේදිකා අනුප්‍රාප්තිකයා වන අතර, බොහෝ සෙවුම් ප්‍රතිඵල ඔබට ලබා දෙන පිළිතුර එයයි. නව mobile-සහ-desktop යෙදුමක් සඳහා එය ශක්තිමත් තේරීමකි.

පවතින WinForms ව්‍යාපාරික (LOB) යෙදුමක් සඳහා එය සාමාන්‍යයෙන් දුෂ්කරම මාර්ගයයි: නිල Linux සහායක් නැත, පාලක කට්ටලය mobile-first ය (DataGridView සමාන එකක් නැත, වෙනස් කවුළු සහ සංවාද කවුළු ආකෘතියක්), තවද සෑම තිරයක්ම XAML වලින් නැවත ගොඩනගනු ලබන්නේ ඔබේ WinForms කේතයේ නිසැකවම පාහේ නොමැති view-model ස්තරයක් සමඟිනි. *.Designer.cs ගොනු අර්ථවත් ලෙස නැවත භාවිත කිරීමක් නැත.

Avalonia

පරිණත, සැබවින්ම බහු-වේදිකා XAML framework එකකි — desktop, mobile සහ WebAssembly — විශිෂ්ට Linux සහායක් සහ Skia renderer එකක් සමඟ. ඔබට නවීන XAML stack එකක් අවශ්‍ය නම් සහ UI ස්තරය නැවත ලිවීමට සූදානම් නම්, මෙය ශක්තිමත්ම සාමාන්‍ය පිළිතුරයි, තවද එය Majorsilence.Forms ධාවනය වන පෙරනිමි ධාරකයයි.

Avalonia හි වාණිජ XPF නිෂ්පාදනය WPF සඳහා වූ ගැළපුම් ස්තරයක් මිස WinForms සඳහා නොවන බව සලකන්න; එය System.Windows.Forms කේත පදනමකට උදව් නොකරයි.

Uno Platform

WinUI/UWP XAML API එක desktop, mobile සහ WebAssembly හරහා ක්‍රියාත්මක කරයි, ඉතා පුළුල් ළඟාවක් සහ ශක්තිමත් මෙවලම් සමඟ. Avalonia හා සමාන තීරණයක හැඩයකි: විශිෂ්ට ඉලක්කයක්, WinForms සිට සම්පූර්ණ UI නැවත ලිවීමක්. ඔබේ ආයතනය දැනටමත් එයට ආයෝජනය කර ඇත්නම්, එය Majorsilence.Forms backend එකක් ලෙස ද ලබා ගත හැක.

Eto.Forms

මෙම ව්‍යාපෘතියෙන් පිටත, ආත්මයෙන් එයට සමීපතම දෙයයි: XAML වෙනුවට forms-සහ-පාලක API එකක් සහිත බහු-වේදිකා .NET UI library එකක්, එක් එක් වේදිකාවේ ස්වදේශීය widgets වලට බැඳේ (Windows මත WinForms, macOS මත Cocoa, Linux මත GTK). එක් එක් OS අනුව ස්වදේශීය පෙනුම සැබෑ වාසියකි.

නමුත් එහි API එක එහිම වේ — Eto.Forms.Form යනු System.Windows.Forms.Form නොවේ, පිරිසැලසුම ඛණ්ඩාංක/anchor-පදනම් නොව container-පදනම් ය, තවද පවතින designer ගොනු සඳහා මාර්ගයක් නැත. ඔබ හුරුපුරුදු ශෛලියකින් නැවත ලියයි. Majorsilence.Forms හට දැන් එහිම GTK 4 backend එකක් ඇති විටදී පවා එම සංසන්දනය වලංගු වේ: Eto එහි පාලකයන් GTK widgets වලට සිතියම්ගත කරන අතර, Majorsilence.Forms GTK කවුළුව සහ input loop එක ධාරකයක් ලෙස පමණක් භාවිත කර, එහිම WinForms-හැඩැති පාලකයන් දිගටම අඳියි.

Mono හි System.Windows.Forms

Mono විසින් WinForms නැවත ක්‍රියාත්මක කිරීමක් බෙදා හැරියේය, පැරණි forum threads වල “WinForms Linux මත ක්‍රියා කරයි” යන්න දකින්නට ලැබෙන්නේ එබැවිනි. එය .NET Framework යුගය ඉලක්ක කළ අතර, කිසි දිනෙක නවීන .NET වෙත ගෙන නොගිය අතර, අද නව port එකක් සඳහා ශක්‍ය ඉලක්කයක් නොවේ.

Wine

Wine ඔබේ වෙනස් නොකළ Windows binary එක Linux සහ macOS මත ධාවනය කරයි. ඔබේ කේතයේ කිසිවක් වෙනස් නොවේ, එය සැබවින්ම ආකර්ෂණීයයි — ඔබට එයට සහාය දීමට සිදු වන තුරු: ඔබ Windows යෙදුමක් සහ ගැළපුම් runtime එකක් බෙදා හරියි, Wine හි Win32/GDI+ ආවරණය කුමක් වුවත් එය ඔබට උරුම වේ, ධාරක OS සමඟ ඒකාබද්ධතාවය ආසන්න පමණි, තවද installers සහ updates සංකීර්ණ වේ. එය වේදිකා උපාය මාර්ගයක් නොව, deployment විසඳුම් මාර්ගයකි (workaround).

WPF මත රැඳී සිටීම

WPF හොඳ framework එකක් වන අතර WinForms සිට සංකල්පීය වශයෙන් සුළු පියවරකි, නමුත් එය Windows-පමණක් ය. එය “UI නවීකරණය කරන්න” යන්න විසඳයි; එය “macOS සහ Linux මත ධාවනය කරන්න” යන්න විසඳන්නේ නැත. (ඔබට දැනටමත් WPF shell එකක් ඇති අතර එය තුළ බහු-වේදිකා තිර අවශ්‍ය නම්, හරියටම ඒ සඳහා Majorsilence.Forms හට WPF ධාරක backend එකක් ඇත — නමුත් WPF shell එක Windows මතම පවතී.)

Majorsilence.Forms නිවැරදි පිළිතුර වන්නේ කවදාද

එය එසේ නොවන්නේ කවදාද

ඊළඟට