c# - 窗体 : scroll programmatically

标签 c# winforms c#-4.0

我正在开发 Windows 窗体应用程序。我有以下问题:在一个表单中有一个面板,在那个面板中我有许多控件(只是一个带有文本框的标签,数量是在运行时确定的)。此面板的大小小于动态添加的所有控件的总和。所以,我需要一个卷轴。好吧,这个想法是:当用户打开表单时:第一个控件必须获得焦点,用户输入文本并按回车键,下一个控件必须获得焦点,依此类推,直到完成。

很可能不是所有的控件都适合面板,所以我希望当面板内的控件获得焦点时,面板滚动让用户看到控件并允许他看到他正在输入的内容文本框。

我希望清楚。

这里是一些代码,这段代码用于生成控件并添加到面板中:

    List<String> titles = this.BancaService.ValuesTitle();
    int position = 0;
    foreach (String title in titles)
    {
         BancaInputControl control = new BancaInputControl(title);
         control.OnInputGotFocus = (c) => {
                 //pnBancaInputContainer.VerticalScroll.Value = 40;
                 //pnBancaInputContainer.AutoScrollOffset = new Point(0, c.Top);
                 // HERE, WHAT CAN I DO?
                 };
         control.Top = position;
         this.pnBancaInputContainer.Controls.Add(control);
         position += 10 + control.Height;
    }

最佳答案

如果你设置AutoScroll为真,这将自动处理。至于 Enter 应该将焦点移动到下一个字段的想法,最好的解决方案是执行 enter 就好像它是 BancaInputControl 中的 TAB 键:

protected override void OnKeyDown(KeyEventArgs e)
{
    base.OnKeyDown(e);

    if (e.KeyCode == Keys.Enter)
    {
        e.Handled = true;
        //  Move focus to next control in parent container
        Parent.SelectNextControl(this, true, true, false, false);
    }
}

如果 BancaInputControl 是复合控件(包含其他控件的 UserControl),则每个子控件都应将 KeyDown 事件挂接到此处理程序。它试图将焦点移动到 BancaInputControl 中的下一个控件;如果失败,则将焦点移至父容器的下一个控件。

private void textBox_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
    {
        e.Handled = true;
        if (!SelectNextControl((Control)sender, true, true, false, false))
        {
            Parent.SelectNextControl(this, true, true, false, false);
        }
    }
}

关于c# - 窗体 : scroll programmatically,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9770136/

相关文章:

c# - WPF 中的 OpenGL 控件因 OOM 异常而崩溃

c# - 如何处理同一控件上的快捷键和按住键

c# - 更改控件的字体时是否应该处理旧字体?

c# - 如何在 DateTimePicker 控件中自定义日历?

c# - Linq FirstOrDefault - 一个类轮

c# - 为什么编译器必须知道一个 lambda 的类型?

javascript - WebView 滚动内容

c# - 使用 FtpWebRequest 下载文件

c# - 如何在 C# 中使用 Bouncy CaSTLe 将 X.509 v.3 谷歌证书添加到项目中

asp.net-mvc - 在 Lucene.Net.Store.SimpleFSDirectory@ 中找不到段* 文件