是自定义控件获得最终大小时抛出的事件吗? (.NET Compact Framework)

时间:2009-12-11 16:06:29

标签: c# winforms compact-framework custom-controls

我正在使用.Net Compact Framework 2.0 SP2和C#开发Windows Mobile 5.0或更高版本。

我有一个名为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);)。

有什么建议吗?

4 个答案:

答案 0 :(得分:3)

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

要提高渲染性能,请调用BeginUpdate,更新可能更改其大小的属性,然后调用EndUpdate方法。这将最小化调整大小调用的渲染调用。

答案 1 :(得分:1)

Control.ParentChanged事件/ Control.OnParentChanged方法应该处理添加到控件的通知

我会使用Control.Paint / Control.OnPaint来确定'最终'尺寸。

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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

将以下代码添加到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>

用自己的名称替换名称空间和类,同时检查公钥标记是否正确