我无法使用通过 Class 创建的 Winforms 控件

I can't use a Winforms Control created with a Class

我正在为我的应用程序寻找一个圆形图片框,我偶然发现了这段代码(它不是我的),我已经尝试了很多次,但我找不到任何错误。我已按照此圆形图片框教程中的每个步骤进行操作,因此它不会是复制错误,因为它在教程中运行良好。

using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using System.Windows.Forms;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.ComponentModel;

namespace New_Radio_Barcelona.Controls
{
 
        class RashiCircularPictureBox : PictureBox
        {
            private int border = 2;
            private Color colorBorder = Color.RoyalBlue;
            private Color colorBorder2 = Color.HotPink;
            private DashStyle borderstyle = DashStyle.Solid;
            private DashCap borderCap = DashCap.Flat;
            private float gradiant = 50f;

        public RashiCircularPictureBox()
        {
            this.Size = new Size(95, 95);
            this.SizeMode = PictureBoxSizeMode.StretchImage;
        }

        public int Border
            {
                get
                {
                    return border;
                }

                set
                {
                    border = value;
                    this.Invalidate();
                }
            }

            public Color ColorBorder
            {
                get
                {
                    return colorBorder;
                }

                set
                {
                    colorBorder = value;
                    this.Invalidate();

                }
            }

            public Color ColorBorder2
            {
                get
                {
                    return colorBorder2;
                }

                set
                {
                    colorBorder2 = value;
                    this.Invalidate();

                }
            }

            public DashStyle Borderstyle
            {
                get
                {
                    return borderstyle;
                }

                set
                {
                    borderstyle = value;
                    this.Invalidate();

                }
            }

            public DashCap BorderCap
            {
                get
                {
                    return borderCap;
                }

                set
                {
                    borderCap = value;
                    this.Invalidate();

                }
            }

            public float Gradiant
            {
                get
                {
                    return gradiant;
                }

                set
                {
                    gradiant = value;
                    this.Invalidate();

                }
            }

            protected override void OnResize(EventArgs e)
            {
                base.OnResize(e);
                this.Size = new Size(this.Width, this.Width);
            }

            protected override void OnPaint(PaintEventArgs pe)
            {
                base.OnPaint(pe);

                var graphic = pe.Graphics;
                var rect = Rectangle.Inflate(this.ClientRectangle, -1, -1);
                var rectborder = Rectangle.Inflate(rect, -border, -border);
                var size = border > 0 ? border * 3 : 1;

                using (var bordercolorG = new LinearGradientBrush(rectborder, colorBorder, colorBorder2, gradiant))
                using (var path = new GraphicsPath())
                using (var pen = new Pen(this.Parent.BackColor, border))
                using (var penborder = new Pen(bordercolorG, size))
                {

                    graphic.SmoothingMode = SmoothingMode.AntiAlias;
                    penborder.DashStyle = borderstyle;
                    penborder.DashCap = borderCap;

                    path.AddEllipse(rect);

                    this.Region = new Region(path);

                    graphic.DrawEllipse(pen, rect);
                    if (border > 0)
                    {
                        graphic.DrawEllipse(penborder, rectborder);
                    }

                }

            }



        }
    }

我编译项目,然后尝试将其添加到教程中所示的“设计”选项卡。它说它无法加载。我试图了解什么不能正常工作,但我仍然没有发现错误。一些帮助吗? 另一个要考虑的方面是,在 class RashiCircularPictureBox : PictureBox 中将 1 个引用放在代码上方,而在 public RashiCircularPictureBox() 中它表示 0 个引用。可能是为了这个,但我不是 类 方面的专家,而且我陷入了这种愚蠢。如果有人能让我对这个问题保持理智,我将不胜感激

大多数版本的设计器 Visual Studio 直到最近都是 32 位进程。因此,如果控件是作为 64 位构建的,它将无法在设计时加载它,但 VS 仍然能够创建可以在运行时使用 64 位控件的 64 位应用程序。

这意味着如果您将控件构建为 32 位或 AnyCPU,它应该可以解决设计时加载问题。

release notes of Visual Studio 2022 version 17.0.0 声明“devenv.exe 现在仅 64 位”。我自己还没有尝试过,但这可能意味着您现在可以在设计时使用较新版本的 VS 来使用 64 位控件。

在所有情况下,AnyCPU 都应该可以工作。