【问题标题】:Inherited control not showing in designerview while x86x86 时,继承的控件未显示在设计器视图中
【发布时间】:2021-09-09 13:33:42
【问题描述】:

我正在 Visual Studio 2019 中创建一个 Windows 应用程序。我使用了一个 COM 引用(IBM PCOMM v 13,32 位),它仅在我将项目目标设置为 x86 时才有效。

当我将目标从 Any CPUx64 更改为 x86 时,COM 引用效果很好。但是,我通过继承创建的所有控件都从设计器视图中消失了。表格基本上是空的。我自己的控件存储在项目中包含的单独 .cs 文件中。

当我将目标改回 Any CPUx64 时,我的控件重新出现,但 COM 引用不起作用(由于不是 x86 em>)。

这是我在表单中使用的一种简单控件的 .cs 代码:

using System;
using System.Drawing;
using System.Windows.Forms;

namespace Stackoverflow
{
    public class LabelTitle : Label
    {
        public LabelTitle()
        {
            ForeColor = Color.FromArgb(0, 95, 165);
            Font = new Font("Segoe UI", 11, FontStyle.Bold);
        }
    }
}

值得注意的是,标准控件在 x86 中工作。不过,我更喜欢使用自己的自定义控件。

x86 中构建时如何继续使用自己的控件?

【问题讨论】:

  • 我自己的控件存储在单独的 .cs 文件中是什么意思?您是否构建了一个库,或者这些控件是同一个项目的一部分,存储在不同的文件中?如果是这种情况,当您更改目标 CPU 时,控件没有理由不工作。除非您有错误阻止 Designer 的初始化完成(例如,使用错误的 CharSet 进行 P/Invoking)。 -- 尝试清理解决方案(不是项目),重建解决方案,关闭 VS 并重新启动它。之后添加 alien 的东西。
  • 嗨,吉米。 我自己的控件存储在单独的 .cs 文件中,我的意思是我右键单击解决方案资源管理器中的项目名称 > 添加 > 新项目。然后我选择了一个 Visual C# 类并将其命名为 LabelTitle.cs。此 .cs 文件存储在 windows 的项目文件夹中 (...\repos\Stackoverflow),因此也存储在 Project Explorer 的项目中。我尝试了您的建议来清理解决方案,重建解决方案,关闭 VS 并重新启动它,但没有任何反应。我也试过关闭VS,删除bin和obj文件夹,但也没有解决。
  • 更新:表单现在不会再出现在任何 CPU 或 x64 上。这很奇怪。
  • 你有更多/不同的问题。检查工具箱,看看你是否在那里找到你的控件。将[ToolboxItem(true)] 添加到所有使用嵌套命名空间的自定义控件。检查所有控件的实际命名空间,验证它是否一致。 -- 可能,将所有控件添加到以 AnyCPU 为目标的库中。
  • 我尝试在控件命名空间中包含 [ToolboxItem(true)] 但没有成功。

标签: c# visual-studio winforms inheritance x86


【解决方案1】:

我终于找到了解决方案,虽然我不明白为什么这样可以解决问题。

在尝试了cmets中提供的解决方案,在新项目中通过逐行添加和更改来重现错误,发现是目标框架导致了错误。

第一个项目(引发错误)使用模板 Windows Forms App.NET 5.0 框架。但是,如果我将模板 Windows Forms App (.NET Framework) 与框架 .NET 4.7.2 一起使用,我所有继承的控件都可以在 x86 上正常工作。到目前为止,我所有的 COM 引用和控件都可以很好地与 .NET 4.7.2 框架配合使用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-01
    • 2017-04-07
    • 1970-01-01
    • 2013-06-16
    • 1970-01-01
    • 2012-07-17
    相关资源
    最近更新 更多