【问题标题】:Where is the Winforms "application framework" in C# that exists in VB.NET?VB.NET中存在的C#中的Winforms“应用程序框架”在哪里?
【发布时间】:2023-03-25 23:43:01
【问题描述】:

我过去开发过使用“Windows 应用程序框架”设置的 VB.NET Winforms 项目,这些设置位于项目属性的“应用程序”选项卡上:

其中一个特别有用的功能是只需单击复选框即可创建单实例应用程序。这很好用。这是 Winforms 项目的 C# 项目属性:

“应用程序”选项卡和其他地方都没有关于应用程序框架的内容。我发现的所有关于“单实例”应用程序的引用都在谈论使用带有互斥锁的自定义解决方案。我找不到任何关于为什么 C# 项目中没有等效应用程序框架的信息。任何人都可以对此有所了解吗?

【问题讨论】:

  • C# 中没有这样的东西......为什么它在 VB.NET 中...... prolly 因为在 VB6 中有这样的东西
  • 为什么你还是要使用它......这太糟糕了......你总是可以使用你感兴趣的启用选项创建 VB.NET 应用程序,然后编译它,然后使用像 ILSpy 这样的工具参见生成了什么代码。
  • “为什么你还是要使用这个......这太糟糕了”你会解释的。什么是可怕的,为什么?
  • 你有一些全局对象的模型,底层类型的复杂性(Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase)
  • C# 应用程序没有那种商品。如果您只需要一个 SingleInstance 应用程序,则无论如何都可以使用Microsoft.VisualBasic.ApplicationServices。请参阅此答案(众多但非常干净实现之一):Force Single Instance with Mutex handling restart application

标签: c# .net vb.net winforms application-framework


【解决方案1】:

这些属性仅在 VB.Net 项目类型中可用。如果您想在 C# 项目中使用这些 VB.Net 属性,则需要添加对 Microsoft.VisualBasic 程序集的引用并创建从 Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase 继承的自定义 App 类,以访问项目属性中出现的受保护成员并运行您的窗口通过您的自定义应用程序类而不是 C# 应用程序类方法形成应用程序。

static class Program
{
    [STAThread]
    static void Main(string[] args)
    {
        var app = new MyApp(new Form1());
        app.Run(args);
    }
}

internal class MyApp : Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase
{
    public MyApp(Form mainForm)
    {
        this.EnableVisualStyles = true;
        this.SaveMySettingsOnExit = true;
        this.IsSingleInstance = true;
        this.MainForm = mainForm;
    }
}

Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase 为 Winform 应用程序提供预定义的功能,这些功能只能通过 VB.Net 获得。 Microsoft.VisualBasic 程序集中有许多在 C# 中不可用的预定义类库。

【讨论】:

    猜你喜欢
    • 2021-04-07
    • 2015-10-11
    • 2017-12-02
    • 1970-01-01
    • 2011-07-08
    • 2023-03-19
    • 2021-02-24
    • 2010-11-18
    • 2018-03-10
    相关资源
    最近更新 更多