2014-01-23 4 views
0

Я работаю над приложением Winform, используя .net 4.5.Как сбросить полосу прокрутки в верхней части окна

В моем проекте у меня есть окно, содержащее только кнопку.

Когда окно отображается, я добавляю много элементов управления динамически к точке, в которой необходима полоса прокрутки.

Как только элементы управления добавлены, я перемещаю одиночную кнопку в нижней части элементов управления в окне.

Этот шаг перемещения кнопки в нижней части элементов управления делает окно прокрутки вниз. Я проверил это, не перемещая кнопку в нижней части формы, и свиток остается наверху.

Я пробовал "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

Okie. Для всех, у кого есть аналогичная проблема, вот причина проблемы и ее преодоление.

Проблема заключается в том, что по умолчанию кнопка «по умолчанию» выбрана в окне. Поэтому, когда окно запускается, оно прокручивается до положения кнопки.

Я добавил это:

this.Controls[1].Select(); 

после добавления всех моих элементов управления.

Вы должны использовать [1], потому что кнопка уже имеет форму [0].

Смежные вопросы