【问题标题】:How do I click a usercontrols child in designer?如何在设计器中单击用户控件子项?
【发布时间】:2011-12-07 10:10:33
【问题描述】:

我在创建一个自定义控件时遇到了一些麻烦。

我有一个用户控件中的列表框,我需要能够在仍在设计器中时单击列表项。这将使它的行为很像 tabcontrol。

我没有处理太多用户控件,但我尝试捕获一些覆盖事件但没有成功。

    protected override void OnClick(EventArgs e)
    {
        if (DesignMode)
        {
            InvokeOnClick(listBox1, e);
        }
        base.OnClick(e);
    }

我无法在网上找到任何东西。关于如何做到这一点的任何想法?

提前致谢 =)

【问题讨论】:

  • 我假设您在谈论 WinForms,但您可能需要澄清一下。我很难想象为什么这会有用 - 你能解释一下你为什么需要这种行为吗?
  • 我为tabcontrol创建了一个助手用户控件,允许您通过列表查看选项卡和更改tabcontrol的选项卡。它使用绑定源等。很像 Visual Studio 的选项窗口。

标签: c# vb.net winforms visual-studio visual-studio-2008


【解决方案1】:

@Bradley:感谢您为我指明正确的方向

您需要编写一个 ControlDesigner 类,然后在 UserControl 的 [Designer( ... )] 属性中使用它。

请参见此处的示例: http://msdn.microsoft.com/en-us/library/sycctd1z(v=VS.90).aspx

对于实际点击:

http://msdn.microsoft.com/en-us/library/system.windows.forms.design.controldesigner.gethittest(v=VS.90).aspx

ControlDesigner 有一个 protected bool GetHitTest(Point point) 方法 - 您可以在 ControlDesigner 中实现此方法,并在您希望控件根据点击在屏幕上的位置处理点击时返回 true

【讨论】:

  • 谢谢,这真的把我引向了正确的方向!一旦我实现了 gethittest,我就能够接收到控件上所有子级的点击事件。然后我使用布尔设计模式来检查是否处于设计模式并获得列表项的索引。谢谢!
【解决方案2】:

我发现这个链接说你需要实现一个自定义设计器来获得所需的行为,并解释了如何实现它。

http://social.msdn.microsoft.com/Forums/pl-PL/winforms/thread/0b6ed0cb-907c-4733-b245-ae5d0b0e6606

【讨论】:

  • 感谢您的帮助!我只能将获胜者奖励给一个答案,但感谢您以正确的方式指出 sq33G。我至少可以为你 +1。
【解决方案3】:

您也许可以在自定义控件中捕获 MouseDown 事件并将其转发到内部控件。不过,我不确定 MouseDown 在设计模式下的行为。

【讨论】:

  • 这就是我试图做的事情,但我对使用用户控件的工作了解不多。
猜你喜欢
  • 2012-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-07
  • 1970-01-01
相关资源
最近更新 更多