C# WinForms。在组件中实现属性 "Name"

标签 c# .net winforms components windows-forms-designer

我想在 Component 中实现属性 Name,该属性与表单中指向该组件的字段名称具有相同的值。

 private MyComponent myComponent1;
 this.myComponent1.Name = "myComponent1";

WinForms 已经在 Control 类中实现了这样的属性,但我无法理解它是如何工作的。

 private System.Windows.Forms.Button button1;
 this.button1.Name = "button1";

我考虑在 MyComponentDesigner 中声明私有(private)字符串 Name 属性。 或者使用 IComponentChangeService 服务中的 ComponentRename 事件。 探索WinForms的源代码并没有给出确切的解释。

最佳答案

如果您只想在属性网格中显示一个简单的 Name 属性,那么向您的组件添加一个简单的自动 get-set Name 属性就足够了。但是,如果您希望组件具有 Name 属性,并且 (Name) 属性就像控件的 (Name) 属性一样,请添加 Name 属性是这样的:

string name;
[Browsable(false)]
public string Name
{
    get
    {
        if (Site != null)
            name = Site.Name;
        return name;
    }
    set
    {
        if (Site != null)
            Site.Name = value;
        name = value;
    }
} 

这样,您就可以使用代码或在属性网格中获取或设置 Name 属性。在属性网格中,当您为 (Name) 分配值时,它将分配 Name 属性,并且设计器也会生成组件名称分配。

关于C# WinForms。在组件中实现属性 "Name",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46260446/

相关文章:

c# - 使用 Microsoft.Office.Interop.Outlook 读取 *.msg outlook 文件时出现问题

.net - .NET 程序集中的 SVN 修订版,不带 CC.NET

.NET 拆分器控件显示

c# - Control.OnPaint() 在自定义控件中被调用两次

javascript - 使用倒数计时器自动刷新页面

c# - DataGridView 不显示实现 ICustomTypeDescriptor 的对象的属性

c# - 基于某些(不是全部)属性值比较列表内容时嵌套 foreach 的替代方法

c# - Convert.ChangeType() 在可空类型上失败

c# - 取消请求到所有任务的传播时间 (TPL)

C# 向组合框添加长字符串