none
表單改變datagridview不動 RRS feed

  • 問題

  • 大大請問一下,我利用程式碼再form裡加入
    TabControl tabControl = new TabControl();
    tabControl.Anchor = AnchorStyles.Left | AnchorStyles.Bottom | AnchorStyles.Right | AnchorStyles.Top;

    DataGridView MyDGV = new DataGridView();
    MyDGV.Anchor = AnchorStyles.Left | AnchorStyles.Bottom | AnchorStyles.Right | AnchorStyles.Top;
    可是我的表單變大變小datagridview仍不會隨他而變,請問大大這是為什麼呢,如果我直接用拉控制項,是正常的,我是不是少寫了什麼,謝謝
    2009年9月29日 上午 09:00

解答

  • 好就沒用DataGridx了.
    不管.
    會不會動.
    1.看他的Host Control和整個Control 階層而定.
    2.看他的加入順序而定.
    如果以我WPF去寫.如果每個控制項都加到Form裡面.是最後一個加入的,占據最後剩餘的空間.
    所以你這個片段Code看不出來原因
    • 已標示為解答 冰糖旋風 2009年10月8日 上午 01:32
    2009年9月29日 上午 09:09
  • 參考以下程式碼

    將 DataGridView 加入 TabPage 中,將 TabPage 加到 TabControl 中,將 TabControl 加到 Form 中

                TabControl tc = new TabControl();
                tc.Anchor = AnchorStyles.Left | AnchorStyles.Bottom | AnchorStyles.Right | AnchorStyles.Top;
                this.Controls.Add(tc);
    
                TabPage tabPage1 = new TabPage();
                tabPage1.Name = "tabPage1";
                tabPage1.Text = "tabPage1";
                tc.Controls.Add(tabPage1);
    
                DataGridView MyDGV = new DataGridView();
                MyDGV.Anchor = AnchorStyles.Left | AnchorStyles.Bottom | AnchorStyles.Right | AnchorStyles.Top;
                tabPage1.Controls.Add(MyDGV);
    • 已標示為解答 冰糖旋風 2009年10月8日 上午 01:33
    2009年10月1日 上午 01:31
    版主
  • Hi,

    試了一下您的Code
    少加入了TabPage
           private void Form1_Load(object sender, EventArgs e)
            {
                MyAddControl.AddTabCtl(this, 0);
                  Control tabControl = this.Controls.Find("tabctl", true)[0];
                  tabCtl = tabControl as TabControl;
                  tabCtl.TabPages.Add("Test");
                  MyAddControl.AddDataGridView(tabCtl.TabPages[0]);
            }
    但動作正常
    能正常縮放
    無您所述之問題

    謙卑學習,持之以恆,才能不斷的Level Up http://www.dotblogs.com.tw/larrynung/
    • 已標示為解答 冰糖旋風 2009年10月8日 上午 01:33
    2009年10月6日 上午 05:35
  • Hi,

    把您的程式改為MDI
    試了一下也是可以正常縮放
    謙卑學習,持之以恆,才能不斷的Level Up http://www.dotblogs.com.tw/larrynung/
    • 已標示為解答 冰糖旋風 2009年10月8日 上午 01:33
    2009年10月6日 上午 09:06

所有回覆

  • Hi!

    使用以下程式碼可以讓表單變大變小時 datagridview 隨他而變

                DataGridView MyDGV = new DataGridView();
                MyDGV.Anchor = AnchorStyles.Left | AnchorStyles.Bottom | AnchorStyles.Right | AnchorStyles.Top;
                this.Controls.Add(MyDGV);

    你的 DataGridView 是加到表單還是其他的控制項中 ?
    .NET菜鳥自救會 http://www.dotblogs.com.tw/chou/
    2009年9月29日 上午 09:08
    版主
  • 好就沒用DataGridx了.
    不管.
    會不會動.
    1.看他的Host Control和整個Control 階層而定.
    2.看他的加入順序而定.
    如果以我WPF去寫.如果每個控制項都加到Form裡面.是最後一個加入的,占據最後剩餘的空間.
    所以你這個片段Code看不出來原因
    • 已標示為解答 冰糖旋風 2009年10月8日 上午 01:32
    2009年9月29日 上午 09:09
  • TabControl用預設的就好 不用去改Anchor了
    很多種辦法 ~
    例如可以利用MDI的關係 然後XY座標下去+ -對應
    Panel也可以用.....
    或設計成其他Form來對應
    看個人構思吧 ~
    以上
    2009年9月29日 上午 09:44
  • 我試了一下這段Code
            private void Form1_Load(object sender, EventArgs e)
            {
                TabControl tc = new TabControl();
                tc.Anchor = AnchorStyles.Left | AnchorStyles.Bottom | AnchorStyles.Right | AnchorStyles.Top;
                this.Controls.Add(tc);

                DataGridView MyDGV = new DataGridView();
                MyDGV.Anchor = AnchorStyles.Left | AnchorStyles.Bottom | AnchorStyles.Right | AnchorStyles.Top;
                this.Controls.Add(MyDGV);
            }
    它是會隨著Form的大小變化而動的,不知道你的那兩個Control是加到那個Control去了?
    2009年9月29日 下午 02:42
  • 大大您們好,我的MYDGV是加在TabControl,不是還可以加tabPage,而我是加在這裡面的,是因為這種關係嗎,由於我看大大的程式碼都是加在form底下,謝謝
    2009年10月1日 上午 12:31
  • 參考以下程式碼

    將 DataGridView 加入 TabPage 中,將 TabPage 加到 TabControl 中,將 TabControl 加到 Form 中

                TabControl tc = new TabControl();
                tc.Anchor = AnchorStyles.Left | AnchorStyles.Bottom | AnchorStyles.Right | AnchorStyles.Top;
                this.Controls.Add(tc);
    
                TabPage tabPage1 = new TabPage();
                tabPage1.Name = "tabPage1";
                tabPage1.Text = "tabPage1";
                tc.Controls.Add(tabPage1);
    
                DataGridView MyDGV = new DataGridView();
                MyDGV.Anchor = AnchorStyles.Left | AnchorStyles.Bottom | AnchorStyles.Right | AnchorStyles.Top;
                tabPage1.Controls.Add(MyDGV);
    • 已標示為解答 冰糖旋風 2009年10月8日 上午 01:33
    2009年10月1日 上午 01:31
    版主
  • 大大謝謝您們的幫助,可是我的程式碼也是照你的意思寫,但仍然不行,請大大在幫幫我,謝謝
      private void Form2_Load(object sender, EventArgs e)
      {
              AddDataGridView(tabCtl.TabPages[0]);        
      }
     

      public void AddDataGridView(Control WhoAdd)
     {
                NewDGV MyDGV = new NewDGV();
                MyDGV.Name = "datagrid1";
                MyDGV.Size = new Size(WhoAdd.Width, WhoAdd.Height);
                MyDGV.Anchor = AnchorStyles.Left | AnchorStyles.Bottom | AnchorStyles.Right | AnchorStyles.Top;
                WhoAdd.Controls.Add(MyDGV);      
    }
    2009年10月1日 上午 07:34
  • Hi,
    您有提到DataGridView不動
    那摸~TabControl會不會動?!
    視窗大小的改變是用滑鼠去拉動嗎?
    還是是在表單載入時用程式變動?
    NewDGV是第三方套件嗎?

    謙卑學習,持之以恆,才能不斷的Level Up http://www.dotblogs.com.tw/larrynung/
    2009年10月1日 上午 10:08
  •             TabControl tc = new TabControl();
                tc.Anchor = AnchorStyles.Left | AnchorStyles.Bottom | AnchorStyles.Right | AnchorStyles.Top;

                TabPage tp = new TabPage("Test");

                DataGridView MyDGV = new DataGridView();
                MyDGV.Anchor = AnchorStyles.Left | AnchorStyles.Bottom | AnchorStyles.Right | AnchorStyles.Top;
                tp.Controls.Add(MyDGV);//DataGrid加到TapPage

                tc.TabPages.Add(tp);//含DataGrid的TapPage加到TabControl

                this.Controls.Add(tc);//把這個TabControl加到這個Form上

    我把DataGridView加到TabPage,再把這個TabPage加到TabControl,再把這個TabControl加到Form上,這還可會隨著視窗大小在動.
    不然你是怎麼加的?順序??
    2009年10月1日 下午 01:44
  • 大大我的順序剛好跟你相反耶,我是form加入tabcontrol,然後我才會知道要多少個TabPages,再將目前點到的加入Datagridview,難道真是這樣的關係嗎,可是如果我順序變的跟你依樣,那麼我程式在判斷擁有多少個tabpages和因為點了哪個tabpages才載入的,這樣就會有點問題了,謝謝

    2009年10月5日 上午 01:14
  • 大大您好,我的TabControl是可以動的,
    視窗大小是因為表單上面的控制項而來的
    NewDGV是複寫DataGridView寫的,因為我要再datagridview上面可以有button又要有可以enabled動作,謝謝
    2009年10月5日 上午 01:16
  • 大大謝謝您們的幫助,可是我的程式碼也是照你的意思寫,但仍然不行,請大大在幫幫我,謝謝
      private void Form2_Load(object sender, EventArgs e)
      {
              AddDataGridView(tabCtl.TabPages[0]);        
      }
     

      public void AddDataGridView(Control WhoAdd)
     {
                NewDGV MyDGV = new NewDGV();
                MyDGV.Name = "datagrid1";
                MyDGV.Size = new Size(WhoAdd.Width, WhoAdd.Height);
                MyDGV.Anchor = AnchorStyles.Left | AnchorStyles.Bottom | AnchorStyles.Right | AnchorStyles.Top;
                WhoAdd.Controls.Add(MyDGV);      
    }

    看起來你是要將 Data Grid View 直接塞滿整個Control;
    那是否你在AddDataGridView()的方法, 修改如下即是你要的目的呢?

    NewDGV MyDGV=new NewDGV();
    MyDGV.Name = "datagrid1";
    MyDGV.Dock = DockStyle.Fill;

    WhoAdd.Controls.Add(MyDGV);
    2009年10月5日 上午 02:00
  • 大大您好,我已經試了,還是沒有填滿耶,可以在幫幫我嗎,謝謝
    2009年10月5日 上午 02:54
  • Hi,

    可以把CODE或是專案附上嗎?
    若是貼Code的話請附完整點
    像是NewDGV的Code
    還有加入控制項與放大的Code
    若有處理Resize之類的事件也順道附上

    謙卑學習,持之以恆,才能不斷的Level Up http://www.dotblogs.com.tw/larrynung/
    2009年10月5日 上午 03:09
  •          private AddControl MyAddControl = new AddControl();
             TabControl tabCtl;
             private void Form2_Load(object sender, EventArgs e)
            {
                  MyAddControl.AddTabCtl(this, 0);
                  Control tabControl = this.Controls.Find("tabctl", true)[0];
                  tabCtl = tabControl as TabControl;
                  MyAddControl.AddDataGridView(tabCtl.TabPages[0]);
            }

    class AddControl
    {
            /// <summary>
            /// Add tabControl
            /// </summary>
            /// <param name="BtnClickNum"></param>
            public void AddTabCtl(Control WhoAdd, int BtnClickNum)
            {
                TabControl tabControl = new TabControl();
                tabControl.Location = new Point(136, 12);
                tabControl.Size = new Size(WhoAdd.Width - 160, WhoAdd.Height - 48);
                tabControl.Font = new Font("Tahoma", 12, FontStyle.Bold);
                tabControl.Anchor = AnchorStyles.Left | AnchorStyles.Bottom | AnchorStyles.Right | AnchorStyles.Top;
                tabControl.Name = "tabctl";
                WhoAdd.Controls.Add(tabControl);
            }       
            /// <summary>
            /// Add datagridview
            /// </summary>
            /// <param name="TabCtlClickNum"></param>
            public void AddDataGridView(Control WhoAdd)
            {
                NewDGV MyDGV = new NewDGV();
                MyDGV.Name = "datagrid1";
                MyDGV.Size = new Size(WhoAdd.Width, WhoAdd.Height);
                MyDGV.Anchor = AnchorStyles.Left | AnchorStyles.Bottom | AnchorStyles.Right | AnchorStyles.Top;
                MyDGV.Dock = DockStyle.Fill;
                WhoAdd.Controls.Add(MyDGV);      
            }
    }
        class NewDGV : System.Windows.Forms.DataGridView
        {
            protected override bool ProcessCmdKey(ref System.Windows.Forms.Message aoMsg, System.Windows.Forms.Keys aoKey)
            {
                char ch = (char)aoKey;
                string chstring = ch.ToString();
                string msg = "can't input " + chstring + "\r\n" + "Please key 0~9";
                if (chstring.CompareTo("0") < 0 || chstring.CompareTo("9") > 0)
                {
                    if (ch != '\b')
                    {
                        System.Windows.Forms.MessageBox.Show(msg);
                        //aoMsg.WParam = (IntPtr)32;
                        return true;
                    }
                }
                return base.ProcessCmdKey(ref aoMsg, aoKey);
            }
        }
    大大謝謝

    2009年10月6日 上午 02:32
  • Hi,

    試了一下您的Code
    少加入了TabPage
           private void Form1_Load(object sender, EventArgs e)
            {
                MyAddControl.AddTabCtl(this, 0);
                  Control tabControl = this.Controls.Find("tabctl", true)[0];
                  tabCtl = tabControl as TabControl;
                  tabCtl.TabPages.Add("Test");
                  MyAddControl.AddDataGridView(tabCtl.TabPages[0]);
            }
    但動作正常
    能正常縮放
    無您所述之問題

    謙卑學習,持之以恆,才能不斷的Level Up http://www.dotblogs.com.tw/larrynung/
    • 已標示為解答 冰糖旋風 2009年10月8日 上午 01:33
    2009年10月6日 上午 05:35
  • 大大抱歉,我少寫,不過我是有寫的,不然程式就會出錯了,呵呵,那根mdiform有關係嗎,因為我真的無法讓他隨表單而動,謝謝
    2009年10月6日 上午 08:23
  • Hi,

    把您的程式改為MDI
    試了一下也是可以正常縮放
    謙卑學習,持之以恆,才能不斷的Level Up http://www.dotblogs.com.tw/larrynung/
    • 已標示為解答 冰糖旋風 2009年10月8日 上午 01:33
    2009年10月6日 上午 09:06
  • 大大謝謝您的耐心
    2009年10月8日 上午 01:32