所以,我有一个针对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背景控件的东西。
答案 0 :(得分:4)
在.NET CF中更改表单的高度和宽度无效,除非将FormBorderStyle
设置为None
。
但是,在您的情况下这样做并不是一个好主意,因为您实际上并不想要无边框表单。在您的情况下,正确的做法是将所有控件(标签和文本框)放在Panel
上(当然,它位于您的表单上),然后在SIP打开和关闭时调整面板大小
编辑:由于我在Windows Mobile中看过这种界面,请允许我给你一些未经请求的UI建议。使用.NET CF应用程序的规则#1是:“在任何情况下都不要使用SIP”。当然,如果没有手写笔,SIP就完全无法使用,而且使用手写笔并不是很多,特别是对于稍微不对齐的屏幕。
如果你必须打破规则#1(当然,你必须为大多数类型的自由格式文本输入打破这个规则),那么你的UI至少应该对用户礼貌并做两件事:
最后,我一般发现使用this之类的静态方法比使用每个表单添加一个InputControl更容易。我发现InputControls很痛苦,如果你有多个表格并且同时打开一个InputControl,它们有时会相互影响。