当输入面板打开时,面板不会滚动到聚焦控制
在Windows Mobile 6.5应用程序上工作并遇到我认为会自动处理的问题。 我在窗体上有一个面板,并将AutoScroll属性设置为true。 有一个显示焦点上的输入面板的文本框。 为了进行测试,我将文本框放置在可见面板之外以强制滚动条。 在文本框中单击,弹出其中EnabledChanged事件调整面板大小的输入面板。 由于将焦点设置为可见区域之外的控件强制面板滚动(我已经测试过,它按预期工作),我期望当面板调整大小时,它将滚动到聚焦的texbox,但事实并非如此。
这里有一些快速演示代码:
public partial class Form3 : Form
{
public Form3()
{
InitializeComponent();
panel1.Size = this.ClientRectangle.Size;
TextBox t = new TextBox();
t.Size = new Size(100, 20);
// put it out of the panel's bounds
t.Location = new Point(10, 400);
t.GotFocus += new EventHandler(t_GotFocus);
t.LostFocus += new EventHandler(t_LostFocus);
panel1.Controls.Add(t);
t = new TextBox();
t.Size = new Size(100, 200);
t.Location = new Point(10,10);
panel1.Controls.Add(t);
}
void t_LostFocus(object sender, EventArgs e)
{
inputPanel1.Enabled = false;
}
void t_GotFocus(object sender, EventArgs e)
{
inputPanel1.Enabled = true;
}
private void inputPanel1_EnabledChanged(object sender, EventArgs e)
{
if (inputPanel1.Enabled)
panel1.Size = inputPanel1.VisibleDesktop.Size;
else
panel1.Size = this.ClientRectangle.Size;
}
}
问题在于当面板重新调整大小时,它不会重新调整滚动位置以保持焦点控制可见。
您需要做的是调整面板的AutoScrollPosition,以便在面板大小发生更改后,您想要保持显示的控件的底部边界可见。
对于单个控件,它看起来像这样:
private void inputPanel1_EnabledChanged(object sender, EventArgs e)
{
if (inputPanel1.Enabled)
{
panel1.Size = inputPanel1.VisibleDesktop.Size;
panel1.AutoScrollPosition = new Point(0, t.Bounds.Bottom - panel1.Height - panel1.AutoScrollPosition.Y);
}
else
panel1.Size = this.ClientRectangle.Size;
}
阅读AutoScrollPosition以了解数学运作方式。
http://msdn.microsoft.com/en-us/library/system.windows.forms.scrollablecontrol.autoscrollposition.aspx
设置AutoScrollPosition有点违反直觉。
链接地址: http://www.djcxy.com/p/53695.html上一篇: Panel not scrolling to focused control when input panel opens
下一篇: How to reload registry settings ? (compact framework on a Symbol device)