2011-10-14 44 views
1

我在創建一個自定義控件時遇到了一些麻煩。如何在設計器中單擊一個usercontrols子項?

我得到的是一個用戶控件中的列表框,我需要能夠在設計器中單擊列表項。這將使其行爲非常像tabcontrol。

我還沒有涉及usercontrols,但我試圖捕獲一些overide事件沒有成功。

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

我一直沒有找到任何網絡上的任何想法,我怎麼能做到這一點?

在此先感謝=)

+2

我假設你在談論WinForms,但你可能想澄清一下。我很難想象爲什麼這會有用 - 你能解釋爲什麼你需要這種行爲嗎? – codeConcussion

+0

我爲tabcontrol創建了一個助手usercontrol,它允許您查看選項卡並通過列表更改tabcontrol的選項卡。它使用綁定源等。就像Visual Studio的選項窗口。 –

回答

2

@Bradley:您指出我在正確的方向

你需要編寫一個ControlDesigner類,然後在你的用戶控件一個[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當你想你的控制來處理點擊,根據點擊在屏幕上的位置。

+0

謝謝,這真的讓我走向了正確的方向!一旦我實現了gethittest,我就可以接收控件上所有孩子的點擊事件。然後我使用布爾DesignMode來檢查是否在設計模式下獲得了listitem的索引。謝謝! –

0

您可能能夠逃脫在自定義控件捕捉MouseDown事件和轉發它到內部控制。我不確定MouseDown如何在設計模式下運行。

+0

這就是我正在嘗試做的事情,但我不知道如何使用usercontrols來使其工作。 –

相關問題