Skip to content

Conversation

Copy link

Copilot AI commented Dec 23, 2025

Proof of concept converting two WinForms dialogs to Eto.Forms to evaluate cross-platform UI modernization.

Implementation

New Projects

  • Central.Eto - Library with Eto.Forms dialog implementations
  • Central.Eto.Demo - Demo application showcasing converted dialogs

Converted Dialogs

  • PortableCreatorDialog - Portable installation creator
  • SelectCommandDialog - Command selection interface (simplified)

Key Patterns

  • Manual UI construction using TableLayout and StackLayout
  • Resx localization via ResourceManager (17 languages preserved)
  • Event handlers map directly from WinForms equivalents
// Eto.Forms layout approach
Content = new TableLayout
{
    Spacing = new Size(5, 10),
    Rows =
    {
        new TableRow(labelInfo),
        new TableRow(targetLayout),
        new TableRow { ScaleHeight = true }
    }
};

Findings

Viable for cross-platform UI - Resx localization works unchanged, layout system is more flexible than WinForms anchoring, but requires manual UI construction.

Trade-offs - ~2x LOC per dialog (no designer code separation), steeper learning curve, but cleaner diffs and explicit layout logic.

See ETO_FORMS_SPIKE.md for detailed analysis and src/Central.Eto/README.md for technical comparison.

Warning

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • ci.appveyor.com
    • Triggering command: /usr/bin/dotnet dotnet restore (dns block)
    • Triggering command: /usr/bin/dotnet dotnet build (dns block)
    • Triggering command: /usr/bin/dotnet dotnet build Central.Eto.Demo/Central.Eto.Demo.csproj --no-restore (dns block)
  • t1.symcb.com
    • Triggering command: /usr/bin/dotnet dotnet build (dns block)
  • t2.symcb.com
    • Triggering command: /usr/bin/dotnet dotnet build (dns block)
  • tl.symcb.com
    • Triggering command: /usr/bin/dotnet dotnet build (dns block)
  • tl.symcd.com
    • Triggering command: /usr/bin/dotnet dotnet build (dns block)

If you need me to access, download, or install something from one of these locations, you can either:

Original prompt

This section details on the original issue you should resolve

<issue_title>Eto.Forms spike</issue_title>
<issue_description>Pick one or two simple Forms in the project and convert them from WinForms to Eto.Forms as a proof of concept. Make sure to retain resx-based localization.</issue_description>

Comments on the Issue (you are @copilot in this section)


💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.

Copilot AI changed the title [WIP] Convert WinForms to Eto.Forms as proof of concept Eto.Forms spike: Convert PortableCreatorDialog and SelectCommandDialog Dec 23, 2025
Copilot AI requested a review from bastianeicher December 23, 2025 14:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Eto.Forms spike

2 participants