2016-09-05 16 views
-1

私は自分のWindowsフォームアプリケーションを作成しています。私はTableLayoutContainer要素にいくつか問題があります。または行が重畳されている(スクロールバーが不要)か、1行目と2行目の間に大きな間隔があります。 フォームのサイズに応じて動的に変化するサイズのコンテナ、自動垂直スクロール(コンテナのサイズが大きい場合)が必要です。コードやコンテナのプロパティを修正するのを手伝ってください。Windowsフォームの階層化

  Label LabelG = new Label[len]; 
      NumericUpDown NumberControlBars = new NumericUpDown[len]; 

      for (int i = 0; i < len; i++) 
      { 
      TablePanelContainer.RowCount++; 
      TablePanelContainer.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25F));     

      LabelG[i] = new System.Windows.Forms.Label(); 
      LabelG[i].Name = "Label" + i.ToString(); 
      LabelG[i].Size = new System.Drawing.Size(40, 23); 
      LabelG[i].Text = Groups[i].ToString(); 
      LabelG[i].Dock = DockStyle.Right; 
      LabelG[i].Anchor = (AnchorStyles.Right | AnchorStyles.Top); 
      LabelG[i].TextAlign = ContentAlignment.MiddleRight;     
      TablePanelContainer.Controls.Add(LabelG[i], 0, i); 

      NumberControlBars[i] = new System.Windows.Forms.NumericUpDown(); 
      NumberControlBars[i].Name = "Label" + i.ToString(); 
      NumberControlBars[i].MaximumSize = new System.Drawing.Size(40,23); 
      NumberControlBars[i].Text = "0"; 
      NumberControlBars[i].Dock = DockStyle.Left; 
      NumberControlBars[i].Anchor = (AnchorStyles.Left | AnchorStyles.Top); 
      TablePanelContainer.Controls.Add(NumberControlBars[i], 1, i); 
      } 

Properties Bug

+0

あなたはどのような問題を持っていますか? –

+0

私はTableLayoutContainerの作業が正しくありません(バグの例は添付されている画像にあります) – SergeyA

答えて

1

私は小さなアプリで機能を再現しています。特別falseにAutoSize設定が重要である

偽:上、下、左、右

  • 自動スクロール:
  • AutoSizeプロパティはTrueこれらはあなたのTablePanelLayout制御

    • アンカーのための設定です。そうしないと、コントロールはすべての行を収容するのに必要な高さにサイズ変更されます。その場合、コンテナにはすべてを表示するのに十分なスペースがあるため、スクロールバーは表示されません。サイズがフォームに収まらないことは気にしません。私はその最初の行のスタイルを適応し、最初の行との癖を克服するために

      tablelayoutpanel in design mode and properties

      これは、設計者がどのように見えるかです。それはデザイナーがここでいくつかのトリックを演奏するように見えます。コードは次のようになります。

      tableLayoutPanel1.SuspendLayout(); 
      // adapt styling of first row 
      if (tableLayoutPanel1.RowStyles.Count > 0) 
      { 
          tableLayoutPanel1.RowStyles[0].SizeType = SizeType.Absolute; 
          tableLayoutPanel1.RowStyles[0].Height = 25F; 
      } 
      for(int i=0; i<100; i++) 
      { 
          var lbl = new Label(); 
          lbl.Text = i.ToString(); 
          tableLayoutPanel1.Controls.Add(lbl, 0, i); 
      
          var num = new NumericUpDown(); 
          tableLayoutPanel1.Controls.Add(num,1 ,i); 
      
          tableLayoutPanel1.RowCount++; 
      } 
      
      tableLayoutPanel1.ResumeLayout(); 
      

      実行すると、これが結果です:

      animation of code execution

  • +0

    あなたの質問には、ポスターの回答よりも1000倍多くの努力が必要です。 –

    +0

    ええ、無料のポップコーンはどこですか? –

    +0

    一度私たちはすべて若かったし、十分な経験がありませんでした。ありがとうございました@rene – SergeyA