2009-12-11 53 views
0

我正在使用.Net Compact Framework 2.0 SP2和C#开发Windows Mobile 5.0或更高版本。自定义控件获取最终大小时引发的事件吗? (.NET Compact Framework)

我有一个名为PullDownMenu的自定义控件(它继承自System.Windows.Form.Control)。这是我用一个WinForm,以显示它的代码:

PullDownMenu menu = new PullDownMenu(); 
menu.Location = new Point(0, 0); 
menu.Dock = DockStyle.Fill; 
this.Controls.Add(menu); 

我已经注意到在这个过程中,它的尺寸变化。我如何知道它何时达到最终尺寸?

是的,我知道我可以检查OnResize事件,但这个事件被多次调用,我认为它可以降低性能。

当控件完全显示时是否存在引发的事件?或者将其添加到其父项(在此行上:this.Controls.Add(menu);)。

有什么建议吗?

回答

3

Compact Framework中的一些控件支持可能有助于解决此问题的BeginUpdate和EndUpdate方法。使用自定义控件,我相信你可能必须实现自己的方法来支持这种行为。

要提高渲染性能,请调用BeginUpdate,更新可能更改其大小的属性,然后调用EndUpdate方法。这将最大限度地减少调整大小调用的呈现调用。

+0

我在哪里可以提高性能?在OnResize方法?我不想使用这种方法。我不明白这个答案。 – VansFannel 2009-12-12 14:27:45

+0

我不明白你。 – VansFannel 2009-12-14 16:33:17

1

的Control.ParentChanged事件/ Control.OnParentChanged方法应该处理被添加到一个控制

我会使用Control.Paint/Control.OnPaint确定“最终”大小的通知。

+0

你怎么会知道它的_last_时间OnPaint被调用? – hometoast 2009-12-11 16:12:24

0

紧凑框架是否允许容器挂载SuspendLayout和ResumeLayout?

如果您事先暂停,并在ResumeLayout后检查它的大小,它应该是它的预期大小。

0

要指定自定义控件的默认大小,请将大小值添加到项目中的xmta文件中。 如果您还没有,请右键单击项目并选择添加新项目,然后选择designtime属性文件并将其命名为您想要的名称。

下面的代码添加到您的XMTA文件:

<Class Name="MyControlNamespace.MyControlClassName"> 
    <DesktopCompatible>true</DesktopCompatible> 
    <Property Name ="Size"> 
     <DefaultValue> 
     <Type>System.Drawing.Size, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</Type> 
     <Value>100, 20</Value> 
     </DefaultValue> 
    </Property> 
</Class> 

更换命名空间和类用自己的,还检查公钥标记是正确的