我正在使用.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按钮移动到哪里?
答案 0 :(得分:0)
Okie。对于任何有类似问题的人来说,问题的原因以及如何克服它。
问题似乎是窗口上默认情况下单个按钮被“选中”。因此,当窗口启动时,它会滚动到按钮的位置。
我补充说:
this.Controls[1].Select();
添加完所有控件后。
您必须使用[1],因为表单上已有的按钮为[0]。