2

私は私が持っているウィンドウフォームを持っています、button1そしてそれがクリックされるUserControlとコードに動的に追加されるのはこれです:

    int c = 0;
    private void button1_Click(object sender, EventArgs e)
    {
        int v;
        v = c++;
        panel1.VerticalScroll.Value = VerticalScroll.Minimum;
        UserControl1 us = new UserControl1();
        us.Name = "us" + v;
        us.Location = new Point(50, 5 + (30 * v));
        us.Tag = btn;
        panel1.Controls.Add(us);
     }

4つのコントロール、2つのコンボUserControlボックスと2つのテキストボックスが含まれています

すなわちcombobox1、、およびcombobox2_textbox1textbox2

同じフォームにある4つのテキストボックスがあります

still-textbox1、、およびstill-textbox2_still-textbox3still-textbox4

あり、button2それは、、、およびであるコンボボックスとテキストボックスにテキストを転送oldcombobox1しますoldcombobox2oldtextbox1oldtextbox2

を2回クリックすると、フォームbutton1に2つ追加UserControlsされます。次の形式でテキストを転送したい

oldcombobox1.text = still-textbox1.text + "," + combobox1.text(which is dynamically generated) + "," + combobox1.text (which is dynamically generated)combobox1などUserControlからのすべてのテキスト(動的に追加されます)

oldcombobox2.text = still-textbox2.text + "," + combobox2.text (which is dynamically generated) + "," + combobox2.text (which is dynamically generated)combobox2などUserControlからのすべてのテキスト(動的に追加されます)

oldtextbox1.text = still-textbox3 + "," + textboox1.text (which is dynamically generated) + "," + textbox1.text (which is dynamically generated)など(動的に追加される)からのすべてのtextbox1テキストUserControl

still-textbox1.text = first とダイナミックUserControlが3回追加された場合、3回含まれることを意味し、次が含まcombobox1れるoldcombobox1必要があります。

first、、、、combobox1.text_ combobox1.text_combobox1.text

このコードを作成しましたが、機能しません

  foreach (Control ctrl in panel1.Controls)
   {
     if (ctrl is UserControl)
     {
         UserControl1 myCrl = ctrl as UserControl1;
         oldcombobox1.text = still-textbox1.text + "," + myCrl.comboBox1.Text;
         oldcombobox2.Text =still-textbox2.text + "," + myCrl.comboBox2.Text;
         oldtextbox1.Text = still-textbox3.text + "," + myCrl.textBox1.Text;
         oldtextbox2.Text.Text = still-textbox4.text + "," + myCrl.textBox2.Text;
      }
    }
4

3 に答える 3

1

UserControl1別のオブジェクトからアクセスするすべての文字列(この場合はtextBox1:の文字列)に対して、クラスに次のようなものを追加する必要があります(素晴らしい名前btw;-))。

public String FirstTextBoxText 
{
   get { return this.textBox1.Text; }
}

次に、Formクラスで次のように言うことができます。

 if (ctrl is UserControl)
 {
     UserControl1 myCrl = ctrl as UserControl1;
     // ...
     oldtextbox1.Text = still-textbox3.text + "," + myCrl.FirstTextBoxText;
 }

それはまだ恐ろしいコードですが、動作します。

于 2013-01-04T18:49:23.897 に答える
0

クラスレベルの変数を作成できます。

    private UserControl1 us1;
    private UserControl1 us2;

    private void button1_Click(object sender, EventArgs e)
    {
        int v;
        v = c++;
        panel1.VerticalScroll.Value = VerticalScroll.Minimum;

        if(us == null) 
        {
            //this is the first time the control is created
            us1 = new UserControl1();
            us1.Name = "us" + v;
            us1.Location = new Point(50, 5 + (30 * v));
            us1.Tag = btn;        
            panel1.Controls.Add(us1);
        }
        else if(us2 ==null)
        {
            us2 = new UserControl1();
            //whatever code you want to execute to change second one
            //you can access first control as us1.xxx
            panel1.Controls.Add(us2);

        }
        else
        {
           //3rd 4th etc...
        }


     }
于 2013-01-04T18:49:07.857 に答える
0

私はこれをイベントで行います。

EventArgsから継承するクラスを作成します:(私はVBが好きです、あなたは翻訳できます)

Public Class ControlEventArgs
  Inherits EventArgs

  Public Property Value1 As String = String.Empty
  Public Property Value2 As String = String.Empty
  Public Property Value3 As String = String.Empty
  Public Property Value4 As String = String.Empty

End Class

次に、コントロールにイベントを追加します。

Public Event ValueSubmittal As EventHandler(Of ControlEventArgs)

Button2_Clickハンドラーの場合:

RaiseEvent ValueSubmittal(me, new ControlEventArgs With {.Value1=comboBox1.Text, .Value2 = comboBox2.Text, .Value3 = textBox1.Text, .Value4 = textBox2.Text}

また、コントロールを動的に作成するフォームでは、イベントハンドラーを接続する必要があります。

AddHandler myNewControl.ValueSubmittal, AddressOf ValueSubmittalHandler

そしてValueSubmittalHandler:

Private Sub ValueSubmittalHandler(sender as Object, e As ControlEventArgs)
  formControl1.Text = e.Value1
  formControl2.Text = e.Value2
  '  etc...
End Sub
于 2013-01-04T18:46:19.083 に答える