2016-12-08 9 views
0

ボタンをクリックするたびにテキストボックスのグループを追加しようとしていますが、次のテキストボックスのグループの位置は以前に作成されたテキストボックスを参照する必要があります。ボタンごとにテキストボックスの位置を計算する

ここは画面キャップです。

これは enter image description here

は、次もう一度ボタンをクリックした後で「もっと」ボタンをクリックする前に、最初の画像があります。 enter image description here

ボタンをもう一度クリックした後。各テキストボックスの間のスペースは、他のテキストボックスとはあまりにも離れています。 enter image description here

私のロケーションコードに何か間違いがあります。誰かが私にこれをチェックするのを助けることができます

Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles addbox.Click 

    Dim Count = gbox2.Controls.OfType(Of TextBox)().ToList().Count 

    For i As Integer = 1 To 6 
     Dim txtbox As New TextBox() 
     Select Case i 
      Case 1 
       txtbox.Location = New System.Drawing.Point(17, 30 * Count) 
       txtbox.Size = New System.Drawing.Size(43, 26) 
       txtbox.Name = "itemno2" & (Count + 1) 
       gbox2.Controls.Add(txtbox) 

      Case 2 
       txtbox.Location = New System.Drawing.Point(81, 30 * Count) 
       txtbox.Size = New System.Drawing.Size(43, 26) 
       txtbox.Name = "unit2" & (Count + 1) 
       gbox2.Controls.Add(txtbox) 

      Case 3 
       txtbox.Location = New System.Drawing.Point(142, 30 * Count) 
       txtbox.Size = New System.Drawing.Size(254, 26) 
       txtbox.Name = "itemdesc2" & (Count + 1) 
       gbox2.Controls.Add(txtbox) 

      Case 4 
       txtbox.Location = New System.Drawing.Point(417, 30 * Count) 
       txtbox.Size = New System.Drawing.Size(56, 26) 
       txtbox.Name = "requan2" & (Count + 1) 
       gbox2.Controls.Add(txtbox) 

      Case 5 
       txtbox.Location = New System.Drawing.Point(21, 30 * Count) 
       txtbox.Size = New System.Drawing.Size(56, 26) 
       txtbox.Name = "issuequan2" & (Count + 1) 
       gbox3.Controls.Add(txtbox) 

      Case 6 
       txtbox.Location = New System.Drawing.Point(94, 30 * Count) 
       txtbox.Size = New System.Drawing.Size(144, 26) 
       txtbox.Name = "remarks2" & (Count + 1) 
       gbox3.Controls.Add(txtbox) 

     End Select 

    Next 
    'addbox.Visible = False 
    save.Visible = False 
End Sub 

何か助けていただければ幸いです。前もって感謝します。

+0

BindingList(Of Requsition)を作成し、データソースとして、それを追加するには、データの1行を表すクラス

Public Class Requisition Public Property ItemNo As Integer Public Property Unit As String Public ItemDescription As String Public Quantity As Decimal End Class 

を作成します。最後のテキストボックス。ボタンをクリックすると、この変数+テキストボックス行間のスペースに、テキストボックスの高さを追加します。最初のトップはあなたのグループボックスに相対的でなければなりません –

答えて

1
Dim currentTop As Integer = 5 
Dim defaultHeight As Integer = 26 

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
    Dim Count = gbox2.Controls.OfType(Of TextBox)().ToList().Count 

    currentTop += defaultHeight + 5 

    For i As Integer = 1 To 6 
     Dim txtbox As New TextBox() 
     Select Case i 
      Case 1 
       txtbox.Location = New System.Drawing.Point(17, currentTop) 
       txtbox.Size = New System.Drawing.Size(43, 26) 
       txtbox.Name = "itemno2" & (Count + 1) 
       gbox2.Controls.Add(txtbox) 

      Case 2 
       txtbox.Location = New System.Drawing.Point(81, currentTop) 
       txtbox.Size = New System.Drawing.Size(43, 26) 
       txtbox.Name = "unit2" & (Count + 1) 
       gbox2.Controls.Add(txtbox) 

      Case 3 
       txtbox.Location = New System.Drawing.Point(142, currentTop) 
       txtbox.Size = New System.Drawing.Size(254, 26) 
       txtbox.Name = "itemdesc2" & (Count + 1) 
       gbox2.Controls.Add(txtbox) 

      Case 4 
       txtbox.Location = New System.Drawing.Point(417, currentTop) 
       txtbox.Size = New System.Drawing.Size(56, 26) 
       txtbox.Name = "requan2" & (Count + 1) 
       gbox2.Controls.Add(txtbox) 

      Case 5 
       txtbox.Location = New System.Drawing.Point(21, currentTop) 
       txtbox.Size = New System.Drawing.Size(56, 26) 
       txtbox.Name = "issuequan2" & (Count + 1) 
       gbox3.Controls.Add(txtbox) 

      Case 6 
       txtbox.Location = New System.Drawing.Point(94, currentTop) 
       txtbox.Size = New System.Drawing.Size(144, 26) 
       txtbox.Name = "remarks2" & (Count + 1) 
       gbox3.Controls.Add(txtbox) 

     End Select 

    Next 
End Sub 
+0

ええと、助けてくれてありがとうが、もう一度 "More"ボタンをクリックすると、テキストボックスが表示されないようです。 – User2341

+0

ボタンを作成しました。あなたのボタンの名前はaddboxです。 –

1

仕事のための適切なツールを使用する - DataGridView Control

代わりの位置を計算し、あなただけのDataGridView内の行を追加することができますテキストボックスを追加します。
2つのDataGridViewのコントロールを「依頼」グループと「発行」グループに使用できます。

デザイナーでは、2つのDataGridViewを作成し、必要な列を追加します。そして、あなたはさらに行く場合は、DataSourceプロパティを使用することができます

Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles addbox.Click 
    RequisitionDataGridView.Rows.Add(new object[] {value1, value2, value2 }) 
    IssuanceDataGridView.Rows.Add(new object[] {value6, value7}) 
End Sub 

の両方に新しい行を追加します ボタンクリックイベントハンドラインチ
そして、あなたは、現在のトップの位置を格納する変数を持っている必要がありDataGridiView

Public Class YourForm Inherits Form 
    Private _requsitionData As New BindingList(Of Requsition) 
    Private _issuanceData As New BindingList(Of Issuance) 

    Public Sub New() 
     InitializeComponents() 

     RequisitionDataGridView.DataSource = _requsitionData 
     IssuanceDataGridView.DataSource = _issuanceData 
    End Sub 

    Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles addbox.Click 
     _requsitionData.Add(new Requisition()) 
     _issuanceData.Add(new Issuance()) 
    End Sub  

End Class 
+0

アイデアありがとうございますが、DataGridViewをmsドキュメントテンプレートに接続する方法はありますか?私が実際にやっているのは、テキストボックスの値をブックマークを使ってms文書にコピーする必要があるかどうかです。 – User2341

+0

ブックマークに関するいくつかの情報を保存するために 'DataGridViewCell.Tag'を使うことができます。コードをどのように「接続」しているかを表示できますか? – Fabio

+0

これは、テキストボックスをmsドキュメント、oDoc.Bookmarks.Item( "bookmarkhere")に接続する方法です。Range.Text = textbox1.text – User2341

関連する問題