← මුල් පිටුව

ආරම්භ කිරීම

මිනිත්තු කිහිපයකින් ඔබගේ පළමු Majorsilence.Forms යෙදුම සාදන්න.

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

සැකිල්ලකින් (template)

Majorsilence.Forms යෙදුමක් ආරම්භ කිරීමට පහසුම ක්‍රමය වන්නේ NuGet හි Majorsilence.Forms.Templates ලෙස ප්‍රකාශිත dotnet සැකිල්ලයි.

dotnet new install Majorsilence.Forms.Templates
dotnet new majorsilenceforms
dotnet run --project MajorsilenceFormsApp

මෙය ව්‍යාපෘති දෙකක් සහිත solution එකක් සාදා මූලික “Hello World” MainForm එකක් ධාවනය කරයි:

dotnet new majorsilenceforms -n MyApp (අවශ්‍ය නම් -o <dir> ද සමඟ) නම් කළ ව්‍යාපෘතියක් සහ namespace එකක් ලෙස සාදයි.

ජංගම සහ බ්‍රවුසර head ව්‍යාපෘති

Avalonia හි අනෙකුත් ඉලක්ක සඳහා switch භාවිතයෙන් head ව්‍යාපෘති එක් කරන්න — ඒ සෑම එකක්ම එකම බෙදාගත් UI පුස්තකාලය මත ඇති තුනී head එකකි:

dotnet new majorsilenceforms --IncludeAndroid --IncludeWasm --IncludeiOS
Switch එක් කරන දේ අවශ්‍ය දේ
--IncludeAndroid MajorsilenceFormsApp.Android (net10.0-android) dotnet workload install android
--IncludeWasm MajorsilenceFormsApp.Wasm (net10.0-browser) dotnet workload install wasm-tools (publish සඳහා)
--IncludeiOS MajorsilenceFormsApp.iOS (net10.0-ios) dotnet workload install ios සහිත Mac එකක්

මේ සියල්ල පෙරනිමියෙන් අක්‍රීයයි, එබැවින් සාමාන්‍ය dotnet new majorsilenceforms එකකට පසුව dotnet build අමතර workload එකක් නොමැතිව ක්‍රියා කරයි. iOS head එක පර්යේෂණාත්මකයි (experimental). --msformsVersion සහ --avaloniaVersion මගින් සැකිල්ල ස්ථිර කරන package අනුවාද ප්‍රතිස්ථාපනය කළ හැක; සැකිල්ලේ README බලන්න.

තවමත් වෙනම API ලේඛනයක් නැත, නමුත් Windows Forms අත්දැකීම් ඇති ඕනෑම අයෙකුට මෙම පෘෂ්ඨය හුරුපුරුදු විය යුතුය. හොඳම යොමුව නිදසුන් යෙදුම්වල මූල කේතයයි:

සම්පූර්ණ ලැයිස්තුව සහ ඒ සෑම එකක්ම ධාවනය කරන ආකාරය සඳහා නිදසුන් බලන්න.

මුල සිටම

සාමාන්‍ය .NET console යෙදුමක් Majorsilence.Forms යෙදුමක් බවට පත් කිරීමට, පහත වෙනස්කම් කරන්න.

Project ගොනුව

<PropertyGroup>
    <OutputType>WinExe</OutputType>
    <TargetFramework>net10.0</TargetFramework>
    <Nullable>enable</Nullable>
</PropertyGroup>

Majorsilence.Forms සහ backend එකක් සඳහා යොමුවක් (reference) එක් කරන්න — මූලික package එක කිසිදු කවුළු toolkit එකක් යොමු නොකරයි, එබැවින් තිරය මත සැබවින්ම කවුළුවක් පෙන්වන්නේ backend එකයි:

<ItemGroup>
    <PackageReference Include="Majorsilence.Forms" Version="26.9.0" />
    <PackageReference Include="Majorsilence.Forms.Avalonia" Version="26.9.0" />
</ItemGroup>

මූලික package එක net8.0, net10.0 සහ netstandard2.0 බහු-ඉලක්ක කරයි. කිසිදු බහු-වේදිකා backend එකක් සඳහා -windows උපසර්ගයක් අවශ්‍ය නොවේ.

හිස් පෝරමයක්

using Majorsilence.Forms;

public class MainForm : Form
{
}

Program.cs

ඔබගේ පෝරමයේ instance එකක් සමඟ Application.Run() අමතන්න:

static void Main (string [] args)
{
    Application.Run (new MainForm ());
}

ඔබගේ යෙදුම දැන් ධාවනයට සූදානම් — පෙරනිමි Avalonia backend එක මත, එනම් වෙනත් කිසිදු වින්‍යාසයකින් තොරව Windows, macOS සහ Linux.

වෙනත් backend එකක් තෝරා ගැනීම

Avalonia පෙරනිමියයි: කිසිවක් Platform.Backend සකසා නොමැති විට, Majorsilence.Forms.Avalonia යොමු කර ඇත්නම් framework එක එය load කරයි. එම පෝරමයම වෙනත් ධාරකයක් මත ධාවනය කිරීමට, ඒ වෙනුවට එම backend එකේ package එක යොමු කර Application.Run ට පෙර එය තෝරන්න:

// GTK 4 — සැබෑ Gtk.Window එකක්, මූලිකව Linux සඳහා (GTK 4 runtime අවශ්‍යයි, උදා: libgtk-4-1)
Majorsilence.Forms.Gtk4.Gtk4Application.Use ();
Application.Run (new MainForm ());

// Terminal — පෝරමය ටර්මිනලය පුරා පිරෙයි; Kitty graphics, Sixel, හෝ Unicode block elements
Majorsilence.Forms.Terminal.TerminalApplication.Use ();
Application.Run (new MainForm ());

// Headless — පරීක්ෂණ සහ CI සඳහා තිරයෙන් පිටත (offscreen) විදැහුම්කරණය
Majorsilence.Forms.Backends.Platform.Backend = new Majorsilence.Forms.Headless.HeadlessPlatformBackend ();

Windows මත, නව යෙදුම් සඳහා නොව සංක්‍රමණය සඳහා තවත් backend දෙකක් ඇත: Majorsilence.Forms.WinForms සහ Majorsilence.Forms.Wpf, පවතින WinForms හෝ WPF යෙදුමක් තුළ Majorsilence.Forms පාලක ධාරණය කරයි (myControl.ToWinFormsControl(), myControl.ToWpfElement()), .NET Framework 4.8 මත ද ඇතුළුව. එබැවින් ඔබට වරකට එක් පාලකයක් බැගින් port කර, අවසාන කොටස අවසන් වූ විට Avalonia හෝ Uno වෙත මාරු විය හැක. Uno Platform ධාවනය වන්නේ එහිම app head එක හරහාය. backend හතම, ඒ සෑම එකකටම කළ හැකි සහ කළ නොහැකි දේ, සහ ඔබගේම backend එකක් එක් කරන ආකාරය සඳහා වේදිකා backend බලන්න.

අභිරුචි ලෙස අඳින පාලක තාර්කික ඒකකවලින් අඳියි

පාලකයක OnPaint සහ OnPaintBackground overrides, සහ එහි Paint හසුරුවන, තාර්කික ඒකක (logical units) වලින් අඳියි — framework එකේ අනෙක් සියල්ලටම භාවිත වන එම ඒකකම: Left, Top, Width, Height, ClientRectangle, ClientSize සහ MouseEventArgs.X/Y. framework එක canvas එක සංදර්ශකයට ගැළපෙන සේ පරිමාණනය කරයි, එබැවින් සාමාන්‍ය WinForms ඇඳීමේ කේතය HiDPI ඩෙස්ක්ටොප් එකක හෝ ඕනෑම දුරකථනයක (Android ආසන්න වශයෙන් 2.6–2.75 ක Scaling වාර්තා කරයි) කිසිදු වෙනසකින් තොරව නිවැරදි ප්‍රමාණයෙන් පෙනේ:

protected override void OnPaint (PaintEventArgs e)
{
    base.OnPaint (e);

    e.Graphics.DrawRectangle (Pens.Gray, 0, 0, Width - 1, Height - 1);   // පාලකය වටා රාමුවක් අඳියි
    e.Graphics.FillRectangle (Brushes.LimeGreen, 0, 0, 10, 10);         // 10x10 තාර්කික සමචතුරස්‍රයක්
}

e.ClipRectangle සඳහා ද, ඔබ SkiaSharp සමඟ කෙලින්ම අඳින්නේ නම් e.Canvas සඳහා ද එයම අදාළ වේ. නිශ්චිත උපාංග පික්සලයක් මත යමක් තැබීමට අවශ්‍ය කේතය සඳහා PaintEventArgs.Scaling තවමත් ඇත, ScaledWidth, ScaledBounds සහ LogicalToDeviceUnits ද එසේමය. පාලක ගැලරියේ ඇති GameOfLifePanel.cs සම්පූර්ණ අභිරුචි පාලකයකි.

2026-10-01 ට පෙර නිකුතුවකින් උත්ශ්‍රේණි කරනවාද? paint canvas එක කලින් තිබුණේ උපාංග පික්සලවලින්ය, සහ අභිරුචි පාලකයකට e.Graphics.ScaleTransform (e.Scaling, e.Scaling) තමන් විසින්ම ඇමතීමට සිදු විය. ඔබ එම ඇමතුම එක් කළේ නම් එය ඉවත් කරන්න — නැතහොත් ඇඳීම දැන් දෙවරක් පරිමාණනය වේ. Owner-draw සිදුවීම් (DrawItem, DrawNode, CellPainting) තවමත් ඔබට ලබා දෙන්නේ උපාංග-පික්සල සීමාවන්ය (bounds). මගහැරුණු ඕනෑම දෙයක් අල්ලා ගැනීමට MF_HEADLESS_SCALE=2 සමඟ ඔබගේ පරීක්ෂණ ධාවනය කරන්න.

Hit-testing අමතර වෑයමකින් තොරව ස්ථාවරයි: MouseEventArgs.X/Y පැමිණෙන්නේ Width/Height සහ paint canvas එකට සමාන තාර්කික ඒකකවලින්ය, එබැවින් වරක් ගොඩනගන ජ්‍යාමිතිය දෙකටම සේවය කරයි.

ඊළඟට යා යුත්තේ කොතැනටද

පවතින WinForms යෙදුමක් සංක්‍රමණය කිරීම

අලුතින් ආරම්භ කරනවා වෙනුවට පවතින කේත පදනමක් ගෙන එනවාද? ලේඛන දෙකක් එය ආවරණය කරයි:

බීටා අවධිය: API එක ස්ථාවර වෙමින් පවතින අතර සෑම WinForms කොනක්ම තවමත් ආවරණය වී නැත. නව බහු-වේදිකා ව්‍යාපාරික (LOB) යෙදුම් සඳහා සහ අද සැබෑ යෙදුම් සංක්‍රමණය කිරීම සඳහා එය හොඳින් ගැළපේ — අනුවාදය ස්ථිර කරන්න පමණි.