【问题标题】:Does Winforms (.NET Core 3) support all .NET Framework controlsWinforms (.NET Core 3) 是否支持所有 .NET Framework 控件
【发布时间】:2020-01-28 16:17:24
【问题描述】:

我们刚刚迁移到 .NET,我们正在尝试使用 C#/.NET 重新创建我们的一个旧项目,我们听说 .NET Core 是新项目的必经之路,我们非常有兴趣使用WinForms 为此,所以我一直在尝试使用 Visual Studio 2019 预览版(16.5.0 预览版 2.0),但我注意到并非所有控件都显示在设计器中(我知道设计器刚刚添加到预览中),所以我尝试在 Form1.designer.cs 上手动添加控件,但我不确定这是否是正确的方法,或者我们应该等待更成熟的版本还是只使用 .NET Framework? PS:如果 .NET Core 支持更多,我们也可以使用 WPF。

谢谢

【问题讨论】:

  • 否 - 删除了一些 .NET 1.x 控件,例如 Menu。更改are described here。这些控件早在 2006 年就被其他控件取代了,因此不应使用,文档中对此进行了解释。
  • “所有控件都显示”是指“它没有显示WebBrowser 控件”或更多?
  • 另一方面,WebBrowser 是一个不同的野兽——它是 IE 并且 no 站点不再支持 IE,除非是偶然的。即使它可用,你也不应该使用它。我们也不是在谈论 IE 10。
  • @Selvin 它只显示了一些基本控件,但我认为它们只是在设计器中不支持,因为在手动添加 WebBrowser 后,它出现在设计器中,上面有一个大红叉跨度>
  • @RedZ 问题出在 WebBrowser 本身。您想在其中显示的任何站点很可能都不起作用。人们正在使用 CefSharp 代替,它使用 Chromium 引擎。该项目得到积极维护。另一方面,不要指望 MS 会进一步开发 WebBrowser,尤其是现在他们甚至用 Chromium 取代了 Edge

标签: c# .net winforms .net-core


【解决方案1】:

Winforms (.NET Core 3) 是否支持所有 .NET Framework 控件?

不,它没有。事实上,在 .NET Core 3.1 中,一些过时的 Windows 窗体控件,如 DataGridToolBarContextMenuMenuMainMenuMenuItem,以及它们的子组件已被删除。

您需要改用DataGridViewToolStripContextMenuSrtipMenuStrip 及其子组件。

要查看已删除控件的列表和升级所需的操作,请查看:

我注意到并非所有控件都显示在设计器中

是的,设计时支持仍在开发中,并且某些控件和功能仍然无法通过设计器获得。但是,如果您不想使用设计器,则只需要运行时支持,使用 .NET CORE 3.1 支持但没有设计时支持的控件。

我们应该等待更成熟的版本还是只使用 .NET Framework?

在撰写此答案时,如果您需要定期使用设计器,仍然不建议将您的应用程序移植到 .NET Core。虽然在 VS 2019 Version 16.5 Preview 1 中有内置的设计器支持,但设计器仍处于开发阶段,一些重要的功能,如数据绑定、一些容器控件、本地化、MenuStrip 和 ToolStrip、Visual 继承等尚不可用。

要查看正在开发的功能列表,请查看:

【讨论】:

  • 这就是我一直在寻找的答案,在检查了许多答案并做了一些研究(并阅读了微软的文章)之后,我们决定使用 .NET Core 和 WPF,因为我们更熟悉使用 XAML(无需设计器),因为我们也以相同的方式使用 Xamarin。
  • 为什么建议在 .NET Core 3 中使用 DataGridView 和 WinForms?它不可用!
  • @JensMander 虽然DataGridView 仍然没有设计时支持,但您可以轻松地在代码中使用它。以this post为例,了解如何在代码中使用。
【解决方案2】:

这个简单的技巧可以轻松激活所有缺少的控件来启动你的 Winforms .Net Core 3.1

在您执行这些步骤之前,只需知道这仅确认用于测试,还没有用于生产。一 确定最终生产申请,我会更新帖子。

.Net Framework 4.8 和 .net Core 3.1 为我确认了此解决方案。

有一些步骤如下: 1- 创建您的 winofrms .Net Core 项目。 2- 按 project_name.csproj 并更改:

 netcoreapp3.1

到这个新的:

 net48;netcoreapp3.1

3- 然后打开 Program.cs 并对此进行评论

Application.SetHighDpiMode(HighDpiMode.SystemAware);

变成这样:

//Application.SetHighDpiMode(HighDpiMode.SystemAware);

此解决方案将添加所有控件。只需关闭解决方案并重新打开。

4- 完成应用程序后,只需将所有内容再次更改为默认值,如下所示:

按下 project_name.csproj 并更改:

 netcoreapp3.1

对于 program.cs 取消注释,即使在我回滚到默认值后,应用程序也会对这一行给出错误,所以我保留它的注释

感谢基尔桑

https://devblogs.microsoft.com/dotnet/updates-to-net-core-windows-forms-designer-in-visual-studio-16-5-preview-1/#comment-4562

【讨论】:

  • 我还没有机会尝试这个技巧,但我很快就会尝试,问题是 WinForms .NET Core 的设计器是超级错误的,它有时会冻结,有时它无法删除/移动控件
  • 这根本不起作用。而是弹出很多错误,设计器无法启动。
  • 嗯,已经 8 个月了。我可以确认它仍然非常有问题。有人为 WinForms .NET Core 想出了另一种可视化设计器吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-22
  • 2022-12-04
  • 2017-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-04
相关资源
最近更新 更多