如何为现有的类/结构写一个方法/新的构造函数?填充(水平,垂直)

本文关键字:一个 方法 构造函数 垂直 水平 填充 结构 | 更新日期: 2023-09-27 18:13:29

我正试图通过构建Windows窗体来学习c#,我遇到了一些我无法找到搜索答案的东西。我的搜索结果可能已经为我提供了答案(这是不可能的),但我想在放弃之前确认一下。

我正在创建一个有多个面板和/或FlowLayoutPanels的表单,每个面板都有多个控件。我试图动态计算的空间量,控制占用,所以我可以添加Padding到面板/FlowLayoutPanel有点中心的控制。使用锚可能有更好的方法,但我正在学习,这是我能想到的最好的方法来解决这个特定的问题,帮助我学习。

当我解决这个问题时,我意识到Padding结构没有构造函数,这将使我在其他应用程序(特别是Microsoft Office &VBA) 。我希望能够创建一个new Padding(),它有一个构造函数,接受(int Horizontal, int Vertical)(int Horizontal)(int Vertical),其中'水平' int被复制到控件的。left和。right属性,'垂直' int被复制到控件的。top和。bottom属性。

所以,我的问题:是否有一种方法可以为现有的类/结构编写构造函数,或者以某种方式重载填充结构,这将允许我获得我想要的填充只有两个值,而不是所有四个?

谢谢…

如何为现有的类/结构写一个方法/新的构造函数?填充(水平,垂直)

您可以从现有类派生一个新类,前提是现有类不是sealed。但在您的情况下,类实际上是struct,并且您不能从结构体派生。

通过扩展方法,您可以向现有的类添加类似实例的方法,但是不能向现有的类添加静态方法或构造函数。

在这种情况下,我只需创建一个新的静态实用程序类来做我想做的事情。例如:

public static class PaddingUtil
{
    public static Padding FromHV(int horizontal, int vertical)
    {
        return new Padding(horizontal, vertical, horizontal, vertical);
    }
}

并像这样使用:

Padding p = PaddingUtil.FromHV(10, 20);

你的问题表明你不了解c#的基础知识。我建议你找一本关于c#的书来读。

但为了帮助你现在:

  • 要给对象的字段或属性赋值,只需这样做:

    Padding p = PaddingUtil.FromHV(10, 20);
    myControl.Padding = p;
    

    或等价:

    myControl.Padding = PaddingUtil.FromHV(10, 20);
    

  • 要获取一个对象的字段或属性的当前值,只需这样做:

    Padding p = myControl.Padding;
    
  • 修改Padding结构体的一些属性:

    Padding oldPadding = myControl.Padding;
    Padding newPadding = new Padding(
        10, // Left
        oldPadding.Top,
        10, // Right
        oldPadding.Bottom);
    myControl.Padding = newPadding;
    

您可以将最后一个示例转换为扩展方法。谷歌一下,或者搜索Stack Overflow