【问题标题】:How to create User Control in C# from standard controls?如何从标准控件在 C# 中创建用户控件?
【发布时间】:2011-05-03 17:25:38
【问题描述】:


我想在 C# Visual Studio 2010 中从标准控件创建我的用户控件,该控件在设计时保持独立
问题是,当我像这样创建标准用户控件时:

public partial class MyUserControl: UserControl 
{
    public MyUserControl()
    {
        InitializeComponent();
    }
}

我在上面添加了 2 个按钮和 1 个文本框,它们成为 UserControl 的一部分。
然后,当设计控件并将其添加到表单时,我可以移动它、调整大小等,但我无法单击或选择 Button1 或 Button2 或 TextBox1。
同样双击 button1 不会创建 button1_click 事件,而是创建 UserControl_Load 事件。
我想实现类似于 DataBindingNavigator 控件的效果 - 您可以在其中独立单击每个按钮。

我知道我可以进行公共属性设置/返回用户控件按钮或文本框,但它们会出现在设计器中,无法选择它们。

您认为可以使用标准控件吗?如果是这样,该怎么做?
最好的问候,
mj82

【问题讨论】:

  • 老实说,我认为您不了解用户控件背后的想法。您可以捕获按钮的事件,前提是您将事件转发到控件本身的双击事件。您想要这样做的原因并不完全清楚。我只会说这是一个奇怪的决定。
  • 正如我所说,我想做一些类似于 DataBindingNavigator 的东西,其中每个按钮都可以移动或单击。

标签: c# .net winforms user-controls


【解决方案1】:

你不能这样做,因为这样做没有意义。

假设您可以按照您的要求做 - 然后在表单上您可以移动用户控件按钮等 - 本质上是在表面本身上设计用户控件。好的,但是所有其他也具有该用户控件的表单呢?这就是为什么一旦你放弃用户控制它是固定的。您不是为每个表单实例设计一个用户控件,而是您设计了控件,然后它对每个表单都是相同的。

与单击按钮相同。您想创建一个单击事件处理程序,但根据您的要求,这将在表单中发生。但是按钮不在您的表单上,它在您的用户控件上,它的点击事件必须在用户控件中处理,而不是在父表单中。

用户控件背后的想法是不必按照您的描述进行操作。它们是预组装的积木。

DataBindinghNavigator 只不过是一个工具条。如果您想要这种行为,只需使用工具条即可。

【讨论】:

  • 好吧,那么我接受这是不可能的答案——除非有人找到解决方案;)
【解决方案2】:

通常,您会将控制事件的处理程序放在 UserControl 中。如果您的 UserControl 需要通知页面某些事件,则将这些事件添加到您的 UserControl。

如果您想要在页面上独立触发事件的单独控件,那么这些控件可能不应该是 UserControl 的一部分。

【讨论】:

    【解决方案3】:

    您需要做的是在您的控件中创建事件触发器,然后在您的表单中创建事件处理程序以在单击“button_1”时处理操作等...您无法从表单设计视图中创建事件应该内置到控件中的东西。

    【讨论】:

      【解决方案4】:

      如果您需要使用代码动态操作用户界面,那么您应该尝试研究 MVC。 http://www.asp.net/mvc

      【讨论】:

        猜你喜欢
        • 2011-06-03
        • 1970-01-01
        • 2017-06-07
        • 2011-05-21
        • 2011-06-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多