如何将滚动条重置为窗口顶部

时间:2014-01-23 23:24:52

标签: c# winforms

我正在使用.net 4.5开发Winform应用程序。

在我的项目中,我有一个只包含一个按钮的窗口。

当窗口显示时,我会动态添加大量控件,以便需要滚动条。

添加控件后,我将单个按钮移动到窗口中控件的底部。

将按钮移动到控件底部的这一步骤使窗口滚动到底部。我已经通过不将按钮移动到表单底部进行测试,滚动停留在顶部。

我试过“this.VerticalScroll.Value = 0;”在设置按钮位置之前和之后。

以下是代码,以便您更清楚地了解我尝试做的事情:

public SignoffSurvey(int task_id)
    {
        InitializeComponent();

        this.task_id = task_id;

        int form_top = 10;
        int question_num = 0;

        XmlDocument doc = new XmlDocument();
        doc.Load(DBHandler.getSetting("files_directory") + "\\" + "questionaire.xml");

        foreach (XmlNode node in doc.SelectNodes("/Questions/Question"))
        {
            question_num++;

            string type = node.Attributes["type"].Value;
            int top = 0;

            Panel pnl = new Panel();
            pnl.AutoSize = true;
            pnl.Top = form_top;
            pnl.Left = 10;

            Label text_lbl = new Label();
            text_lbl.Top = top;
            text_lbl.AutoSize = true;
            text_lbl.Text = node["text"].InnerText;
            pnl.Controls.Add(text_lbl);

            top += text_lbl.Height + 5;

            if (type == "mc" || type == "mct")
            {
                XmlNode choices = node["choices"];
                Boolean fc = false;
                foreach (XmlNode choice in choices.ChildNodes)
                {
                    RadioButton rb = new RadioButton();
                    rb.AutoSize = true;
                    rb.Text = choice.InnerText;
                    rb.Top = top;
                    rb.Left = 10;
                    top += rb.Height + 5;
                    pnl.Controls.Add(rb);

                    if (!fc) // check first item.
                    {
                        fc = true;
                        rb.Checked = true;
                    }
                }
            }

            if (type == "mct" || type == "txt")
            {

                TextBox tb = new TextBox();
                tb.Multiline = true;
                tb.Width = 500;
                tb.Height = 250;
                tb.Top = top;
                tb.Left = 10;
                pnl.Controls.Add(tb);
                top += tb.Height + 5;
            }

            pnl.Height = top;
            this.Controls.Add(pnl);
            form_top += pnl.Height + 10;
        }

        this.VerticalScroll.Value = 0;
        this.save_btn.Top = form_top;


    }

我可以强制窗口垂直滚动到顶部,无论这个1按钮移动到哪里?

1 个答案:

答案 0 :(得分:0)

Okie。对于任何有类似问题的人来说,问题的原因以及如何克服它。

问题似乎是窗口上默认情况下单个按钮被“选中”。因此,当窗口启动时,它会滚动到按钮的位置。

我补充说:

this.Controls[1].Select();
添加完所有控件后

您必须使用[1],因为表单上已有的按钮为[0]。