2017-09-01 2 views
1

Ich habe eine CheckedListBox mit ungefähr 12 Elementen erstellt. Ich möchte Textboxen dynamisch erstellen, um bei jeder Auswahl eines Elements einen Eingabewert vom Benutzer im Formular anzuzeigen und zu akzeptieren. Der Textboxes-Wert wird mit den Werten ausgewählter Elemente zum Speichern in eine Sql-Datenbanktabelle verknüpft, wenn ein Button schließlich ausgewählt wird.C# Windows Form: Jedem ausgewählten Listenfeld ein Textfeld zuordnen

Bisher konnte ich nur eine einzelne Textbox anzeigen lassen, obwohl ich andere Objekte aus der Listbox ausgewählt habe. Unten ist mein Code

private void checkedList_ItemCheck(object sender, ItemCheckEventArgs e) 
    { 
     if (e.NewValue == CheckState.Checked) 
     { 
      int n = 6; 
      selectedList.Items.Add(checkedList.SelectedItem.ToString()); 
      for (int x=0; x < checkedList.SelectedItems.Count; x++) 
      { 
       TextBox[] txtBoxes = new TextBox[n]; 
       for (int i = 0; i < n; i++) 
       { 
        txtBoxes[i] = new TextBox(); 
       } 
       for (int i = 0; i < n; i++) 
       { 
       this.Controls.Add(txtBoxes[i]); 
       txtBoxes[i].Location = new Point(450, 100); 
       txtBoxes[i].Size = new System.Drawing.Size(25, 20); 
       txtBoxes[i].Validating += new CancelEventHandler(txt_Validating); 
       } 
      } 
     } 
     else 
     { 
      selectedList.Items.Remove(checkedList.SelectedItem.ToString()); 
     } 

    } 
    private void InitializeMyListBox() 
    { 
     for (int x = 0; x < selectedList.Items.Count; x++) 
     { 
      selectedList.SetSelected(x, true); 
     } 
     // Force the ListBox to scroll back to the top of the list. 
     selectedList.TopIndex = 0; 
    } 

Was habe ich falsch gemacht?

Können Sie bitte dabei helfen.

+0

Sie alle auf der jeweils anderen sind, werden Sie einen anderen Ort oder verwenden Sie einen Flowlayoutpanel holen müssen. Das Erstellen einer eigenen Rastersteuerung mit einzelnen Textfeldern ist selten kein Fehler, bevorzugen Sie immer zuerst DataGridView. –

Antwort

0

Sie haben denselben Speicherort für alle TextBoxen festgelegt. Versuchen Sie, so etwas zu setzen:

txtBoxes[i].Location = new Point(450 + i*20, 100); 
+0

Ich danke Ihnen für Ihre Eingabe. Die anderen TextBoxen werden immer noch nicht angezeigt, auch nachdem txtBoxes [i] gesetzt wurde. Location = new Point (450 + x * 20, 100); –

+0

Ich machte Fehler Sie sollten mit i multiplizieren und nicht x. Also benutze das: txtBoxes [i] .Location = neuer Punkt (450 + i * 20, 100); – Kodre