.NET CF - 根据InputPanel状态设置表单高度

时间:2010-06-01 03:19:24

标签: c# .net compact-framework

所以,我有一个针对Windows Mobile手机的C#项目,我正在尝试使用InputPanel。具体来说,我有一个带有一堆标签和文本框的表单来收集用户输入。我有一个InputPanel,当用户打开SIP时会提醒我。到目前为止一切正常。当我收到SIP状态已更改的消息时,我想更改表单的高度,这似乎是不可能的。

这是我的InputPanel的事件处理程序:

void m_InputPanel_EnabledChanged(object sender, EventArgs e)
{
    // :(  this assignment operation doesn't work and it doesn't               
    this.ClientSize = inputPanel1.VisibleDesktop.Size;
    // doesn't work
    this.Size = inputPanel1.VisibleDesktop.Size;
    // assignment operation works, but isn't very useful
    this.visibleHeight = inputPanel1.VisibleDesktop.Height;
    this.InitializeUI();
}

当我说赋值操作不起作用时,我的意思是调试器中的值不会改变。我可以理解,也许我无法改变Form的大小,但我无法理解为什么尝试更改它不会抛出异常,或者给编译器错误。

我将Form WindowState设置为Normal而不是Maximized,但它没有任何区别。

此外,我已阅读http://www.christec.co.nz/blog/archives/42这个页面告诉我我应该怎么做,但是我不能轻易地将所有控件都放在Panel中,因为我使用了一堆自定义要做alpha背景控件的东西。

1 个答案:

答案 0 :(得分:4)

在.NET CF中更改表单的高度和宽度无效,除非FormBorderStyle设置为None

但是,在您的情况下这样做并不是一个好主意,因为您实际上并不想要无边框表单。在您的情况下,正确的做法是将所有控件(标签和文本框)放在Panel上(当然,它位于您的表单上),然后在SIP打开和关闭时调整面板大小

编辑:由于我在Windows Mobile中看过这种界面,请允许我给你一些未经请求的UI建议。使用.NET CF应用程序的规则#1是:“在任何情况下都不要使用SIP”。当然,如果没有手写笔,SIP就完全无法使用,而且使用手写笔并不是很多,特别是对于稍微不对齐的屏幕。

如果你必须打破规则#1(当然,你必须为大多数类型的自由格式文本输入打破这个规则),那么你的UI至少应该对用户礼貌并做两件事:

  1. 不要为了响应SIP的开启和关闭而不断调整和重新安排表单。如果您的表单需要SIP,请在底部留下永久空间以容纳它。
  2. 不要让用户打开和关闭SIP。如果您的表单需要SIP,请在表单加载时打开SIP,并在表单关闭时关闭SIP。
  3. 最后,我一般发现使用this之类的静态方法比使用每个表单添加一个InputControl更容易。我发现InputControls很痛苦,如果你有多个表格并且同时打开一个InputControl,它们有时会相互影响。