8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

如何在 NET 6.0 中编写 WinForms 设计器

Mister Jojo 1月前

17 0

我需要使用 .net 库版本 6.0 下的组件创建 WinForms 项目。但是当我创建项目和 ControlLibrary 时,Visual Studio 窗体设计器不使用 ControlDesigners

我需要使用 .net 库版本 6.0 下的组件创建 WinForms 项目。但是当我创建项目和 ControlLibrary 时,Visual Studio 窗体设计器不使用 ControlLibrary 中的 ControlDesigners,即使我正确地将设计器绑定到组件。

  [Designer(typeof(MyControlDesigner))]
  [ToolboxItem(true)]
  public class MyControl : Control 
  {

    protected override void OnPaint(PaintEventArgs e)
    {
      e.Graphics.FillRectangle(SystemBrushes.Info, new Rectangle(0, 0, Width, Height));
      e.Graphics.DrawString("MyControl", Font, SystemBrushes.InfoText, new PointF(0, 0));
    }
  }

我已经创建了一些 ActionLists 但它们在设计时没有显示在组件中。

namespace WinFormsControlLibrary1
{
  internal class MyControlDesigner : ControlDesigner
  {
    private DesignerActionListCollection actionLists;

    public override DesignerActionListCollection ActionLists
    {
      get
      {
        if (actionLists == null)
        {
          actionLists = new DesignerActionListCollection();
          actionLists.Add(new DataAxisGridActionList(Component));
          actionLists.AddRange(base.ActionLists);
        }
        return actionLists;
      }
    }
  }

  public class DataAxisGridActionList : DesignerActionList
  {

    public DataAxisGridActionList(IComponent component) : base(component)
    {
    }

    public override DesignerActionItemCollection GetSortedActionItems()
    {
      DesignerActionItemCollection items = new DesignerActionItemCollection();
      items.Add(new DesignerActionMethodItem(this, "Action1", " Action 1", true));
      items.Add(new DesignerActionMethodItem(this, "Action2", "Action 2", true));
      return items;
    }

    public void Action1()
    {
      MessageBox.Show("Action 1");
    }

    public void Action2()
    {
      MessageBox.Show("Action 2");
    }
  }

}

为了测试,我在 .NET Framework 4.7.2 下创建了一个类似的项目和库,设计器在那里运行正常。

enter image description here

enter image description here

我还附加了演示项目的链接。

https://github.com/dmitrybv/WinForms-Net5-Designers

https://github.com/dmitrybv/WinForms-Net-Framework-4.7.2-Designers

帖子版权声明 1、本帖标题:如何在 NET 6.0 中编写 WinForms 设计器
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Mister Jojo在本站《winforms》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 目前,鉴于 WinForms Designer 的新进程外架构中设计时支持性质尚未完全确定,可能更简单的解决方案是安装 WinForms Designer 扩展 SDK。

    它可通过 NuGet 包管理器获取,使用名称: Microsoft.WinForms.Designer.SDK

    或者粘贴到程序包管理器控制台中:

    NuGet\Install-Package Microsoft.WinForms.Designer.SDK -Version 1.6.0
    

    <ItemGroup> 项目配置文件中 <PackageReference> (或创建一个新的):

    <PackageReference Include="Microsoft.WinForms.Designer.SDK" Version="1.6.0" />
    

    关于 Designer 支持的当前状态的描述可以在这里找到:
    .NET 应用程序的 Windows 窗体设计器的状态


    ControlDesigner 的代码文件中添加所需的使用指令 DocumentDesigner

    using Microsoft.DotNet.DesignTools.Designers; 
    

    对于可以接收命中测试和绘制消息的行为服务和装饰器(字形):

    using Microsoft.DotNet.DesignTools.Designers.Behaviors  
    
返回
作者最近主题: