【问题标题】:Panel not scrolling to focused control when input panel opens输入面板打开时面板不滚动到焦点控制
【发布时间】:2010-10-04 21:32:45
【问题描述】:

使用 Windows Mobile 6.5 应用程序并遇到我认为会自动处理的问题。我在表单上有一个面板,并将其 AutoScroll 属性设置为 true。有一个文本框,显示焦点上的输入面板。为了测试,我将文本框放在可见面板之外以强制滚动条。单击文本框会弹出 inputpanel,在其 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;
    }
}

【问题讨论】:

  • 您可能想在您的问题中添加“Windows-mobile”标签,以便其他专家可以注意到这一点并为您提供帮助:)

标签: .net windows-mobile compact-framework autoscroll


【解决方案1】:

问题在于,当面板调整大小时,它不会重新调整滚动位置以保持焦点所在的控件可见。

您需要做的是调整面板的 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 有点违反直觉。

【讨论】:

  • Autoscroll 在紧凑的框架中不起作用——我已经尝试过了。除非我做错了什么,但 AutoScrollPosition 总是以 0、0 结束。你在 .netcf 中做过吗?
  • 如果控件的内容超出其边界,.net cf 中的所有自动滚动都会添加滚动条。我在上面的代码示例中添加了更多内容,以使其更加清晰。您需要自己计算控件的自动滚动位置,并将其设置在输入面板的 EnabledChanged 事件中。我已经能够使它在.net cf中工作
猜你喜欢
  • 1970-01-01
  • 2014-03-02
  • 1970-01-01
  • 2016-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-03
相关资源
最近更新 更多