none
C# Windows Form在AutoScroll=true並移動Scroll後動態產生TextBox時位置產生偏移問題 RRS feed

  • 問題

  • 各位前輩好:

     

    在一個Windows Form中有一個按鈕,按下按鈕會動態地新增二個TextBox,
    因為它所內含的控制項的位置會超過原有Form的大小,所以此Form的AutoScroll=true,
    在沒有移動Scroll後按下按鈕所新增的TextBox位置會正常,
    但當有移動Scroll後按下按鈕所新增的TextBox位置就會跑掉,不在預想的位置上
    有用偵測功能在執行中所看到的Location是一樣的,但所顯示在Form中的位置卻不同
    請問我的程式有什麼錯誤嗎?因為看不出來問題點,請前輩們指點一下,謝謝。


    程式碼如下:

    Code Snippet

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;

    namespace WindowsApplication9
    {
        public partial class Form1 : Form
        {
            int iQCnt = 10;
            string[,] aryVer = new string[100, 2];

            public Form1()
            {
                InitializeComponent();
            }

            private void Form1_Load(object sender, EventArgs e)
            {
                TextBox txtQ;
                for (int i = 0; i < (iQCnt-1); i++)
                {
                   txtQ = new TextBox();
                   txtQ.Name = ("txtQ" + (1 + (i * 2)).ToString());
                   aryVer[i, 0] = txtQ.Name;
                   txtQ.Text = txtQ.Name;
                   txtQ.Size = new Size(500, 30);
                   txtQ.Location = new Point(51, (125 + (i * 62)));
                   this.Controls.Add(txtQ);

                   txtQ = new TextBox();
                   txtQ.Name = ("txtQ" + (2 + (i * 2)).ToString());
                   aryVer[i, 1] = txtQ.Name;
                   txtQ.Text = txtQ.Name;
                   txtQ.Size = new Size(500, 30);
                   txtQ.Location = new Point(51, (156 + (i * 62)));
                   this.Controls.Add(txtQ);
                }
            }

            private void btnAdd_Click(object sender, EventArgs e)
            {
                TextBox txtQ;
                txtQ = new TextBox();
                txtQ.Name = ("txtQ" + (1 + (iQCnt * 2)).ToString());
                aryVer[iQCnt, 0] = txtQ.Name;
                txtQ.Text = txtQ.Name;
                txtQ.Size = new Size(500, 30);
               
                //每次執行的第一次按下後的位置為51,683
                txtQ.Location = new Point(51, (125 + ((iQCnt-1) * 62)));
                this.Controls.Add(txtQ);

     

     

                txtQ = new TextBox();
                txtQ.Name = ("txtQ" + (2 + (iQCnt * 2)).ToString());
                aryVer[iQCnt, 1] = txtQ.Name;
                txtQ.Text = txtQ.Name;
                txtQ.Size = new Size(500, 30);


                //每次執行的第一次按下後的位置為51,714
                txtQ.Location = new Point(51, (156 + ((iQCnt-1) * 62)));
                this.Controls.Add(txtQ);

                iQCnt++;
            }
        }
    }

     

     

     

    2009年1月13日 上午 02:58

所有回覆

  • HI,

     

    請問您有加裝Service Pack嗎?

     

    tihs

    2009年1月13日 上午 03:41
  • 各位前輩好:

     

    我的VS2005版本為8.0.50727.762 (SP.050727-7600)
    .NET Framework的版本為2.0.50727 SP1

     

    記得有做更新,但不知道是不是最新的?還是更新沒有做齊?


    謝謝。

    2009年1月13日 上午 06:24
  • HI,

     

    我用V2008試了一下您的程式碼, 有沒有按FORM的捲軸, 結果都不會跑掉, 動態加入的TextBox會接在原有的TextBox之後, 所以您可以再更新看看, 若還不能解決, 就,,,,,看是否能換更新的工具來開發囉.

     

    tihs

    2009年1月14日 上午 02:35
  • txtQ.Location = new Point(0 + panel1.AutoScrollPosition.X, 0 + panel1.AutoScrollPosition.Y);

    https://msdn.microsoft.com/zh-tw/library/system.windows.forms.scrollablecontrol.autoscrollposition(v=vs.110).aspx


    2018年2月7日 下午 01:36