gpt4 book ai didi

c# - UserControl 作为界面,但在设计器中可见

转载 作者:太空狗 更新时间:2023-10-29 19:57:56 24 4
gpt4 key购买 nike

因此,我们有一个 C# WinForms 项目,其中包含一个包含大量 UserControl 的 Form。每个 UserControl 除了自身的特定成员外,自然会公开所有 UserControl 方法、属性等。

我一直在想,降低处理这些 UserControl 的复杂性的一种方法是通过接口(interface)访问它们。因此,与其拖放 UserControl 到表单,不如在构造函数中这样:

public class MyGiantForm
{
ICustomerName cName;

public MyForm()
{
InitializeComponent();

var uc = new SomeCustomerNameUserControl();
this.Controls.Add(uc);
cName = uc;
}
}

SomeCustomerNameUserControl 自然地实现了 ICustomerNameICustomerName 包含我真正关心的特定属性(例如,FirstNameLastName)。通过这种方式,我可以通过 cName 成员引用 UserControl,而不是被所有 UserControl 成员打败,我只得到ICustomerName 中的那些。

一切都很好,但问题是,如果我这样做,我在设计器中看不到 SomeCustomerNameUserControl。有谁知道我可以这样做但仍然在表单的设计界面上看到 UserControl 吗?

编辑:一种不太复杂的方法是将控件放在基本窗体上。默认情况下(在 C# 中)控件成员是私有(private)的。然后我为每个通过界面公开它的控件创建一个属性。

但是,我会对其他方法感兴趣,即使它更复杂。似乎有一些方法可以使用 IDesignerHost 来完成,但我找不到任何适用的示例。

最佳答案

如果 SomeCustomerNameUserControl 定义如下:

class SomeCustomerNameUserControl : UserControl, ICustomerName
{
}

您仍然可以将此控件放在设计器中(它会创建一些 CustomerNameUserControl1)并在需要时执行此操作:

ICustomerName cName = someCustomerNameUserControl1;

也许我遗漏了什么,但我认为就这么简单。

关于c# - UserControl 作为界面,但在设计器中可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/784155/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com