2017-07-07 5 views
0

ユーザーが[ユーザーの追加]ボタンをクリックすると、行ごとに追加される一連の動的に追加されたコントロールがあります。ページが読み込まれたときにラベルが表示され、ユーザーの追加ボタンがクリックされるたびに同じラベルが下に移動するようにしたい(テキストボックスの各行の下に)。今すぐロードされ、ユーザーが最初にボタンをクリックしたときに下に移動しますが、それ以降は移動します。ここに私のコードは次のとおりです。C#winforms dynimcally createdラベルの位置

グローバル変数:

Label Savelbl = new Label();  
int LabelX = 15; 
int LabelY = 110;  
int spacelbl = 15; 

ページのロード:

Savelbl.Location = new Point(LabelX, LabelY); 
Savelbl.Name = "Savelbl"; 
Savelbl.Text = "Please click 'save' to save your changes"; 
CaeUsersPanel.Controls.Add(Savelbl); 

は、ユーザーボタンを追加します。

private void CAEAddUserbtn_Click(object sender, EventArgs e) 
    { 

     var i = UsernameTextBoxes.Count + 1; // this is a list of the added textboxes 
     ADDUserInfo(i); //method which adds the dynamically created textboxes 

     Savelbl.Location = new Point(LabelX, LabelY + spacelbl); 

    } 

ユーザーを削除]ボタンを(ラベルが復帰移動する必要がありますこれをクリックすると):

private void Remove_Click(object sender, EventArgs e) 
{ 
DialogResult result = MessageBox.Show("Are you sure you want delete this user? \n Deleting users may break workflows", "Delete", MessageBoxButtons.YesNo); 
      if (result == DialogResult.Yes) 
      { 

       int idx = RemoveButtons.IndexOf((Button)sender); 

       // Remove button 
       RemoveButtons[idx].Dispose(); 
       RemoveButtons.RemoveAt(idx); 

       // Remove textbox 
       UsernameTextBoxes[idx + 1].Dispose(); 
       UsernameTextBoxes.RemoveAt(idx + 1); 

       //Shift controls up 
       for (int i = idx; i < RemoveButtons.Count; i++) 
       { 
        UsernameTextBoxes[i + 1].Top -= SpaceDelta; 
       } 

       space -= SpaceDelta; 

       Savelbl.Location = new Point(LabelX, LabelY - spacelbl); 

      } 
     } 
+0

は 'TableLayoutPanel'だけの行を追加または削除を使用してください。はるかに良いアプローチです。 – CodingYoshi

+0

@ CodeYoshiは、テーブルレイアウトパネルにラベルだけを置くことができますか、私はすべてのコントロールを移動する必要がありますか? – GFDSRFV

+0

ダイナミックコントロールだけです。各コントロールの列を作成し、行と列の高さと幅を設定します(すべてデザイナを使用します)。次に、コントロールを追加または削除します。それがどのように動作するかを確認するために、ダミーフォームを作成して遊んでください。その後、それがどのように動作するかを知ったら、実際の形でそれを使用してください。 – CodingYoshi

答えて

1

LabelXとLabelYを更新することはありません。

あなたはまた、おそらく、これらの変数を取り除くことができ
LabelX = Savelbl.Location.X 
LabelY = Savelbl.Location.Y 
Savelbl.Location = new Point(LabelX, LabelY - spacelbl); 

...

+0

私は値を更新する方法を知りません – GFDSRFV

+0

私は私の答えでコードを示した。これでラベルを移動するコードを置き換えます。 – Derek

関連する問題