2015-11-06 40 views
0

我有一个showForm按钮编程创建并打开一个新的form2与4个DomainUpDown元件和OKBtn按钮Form1中。我需要通过我的OKBtnform2form1 richtextbox将DomainUpDown元素的值传递给我。我唯一的区别在于最后的问号。以下是代码片段:从程序生成形式传递DomainUpDown.Value到主要形式

public void showForm_Click(object sender,EventArgs e) 
{ 
     Form frm = new Form(); 
     frm.Size = new Size(264, 183); 
     frm.Name = "MarginSelector"; 
     frm.Text = "Qiymət ver"; 
     frm.ShowIcon = false; 
     frm.Show(); 

     DomainUpDown marginRightVal = new DomainUpDown(); 
     marginRightVal.Location = new Point(150, 100); 
     marginRightVal.Size = new Size(42, 40); 
     frm.Controls.Add(marginRightVal); 
     for (int i = 0; i < 100; i++) 
     { 
      marginRightVal.Items.Add(i + "%"); 
     } 

     Button OKBtn = new Button(); 
     OKBtn.Visible = true; 
     OKBtn.Text = "OK"; 
     OKBtn.Size = new Size(30, 23); 
     OKBtn.Location = new Point(96, 109); 
     frm.Controls.Add(OKBtn); 
     OKBtn.Click += new System.EventHandler(this.OKBtn_Click); 
} 

public void OKBtn_Click(object sender, EventArgs e) 
{ 
     textArea.SelectionLength = 0; 
     textArea.SelectedText = string.Filter("margin-top: {0} ; \n, ? "); 
} 
+0

您需要将'marginRightVal'变量声明移到该方法的外部,以便您还可以在OKBtn_Click事件处理函数中使用它。或者使用lambda表达式。 –

回答

1

您可以按照汉斯顺便他的建议,或者你可以投单击事件的sender到控制,到形式的引用,并遍历Controls收集找到控制您正在寻找。一旦找到,将其分配给一个变量并在逻辑中使用它。一个implentation看起来是这样的:

public void OKBtn_Click(object sender, EventArgs e) 
{ 
    // assume a Control is the sender 
    var ctrl = (Control)sender; 
    // on which form is the control? 
    var frm = ctrl.FindForm(); 
    // iterate over all controls 
    DomainUpDown domainUpDown = null; 
    foreach(var ctr in frm.Controls) 
    { 
     // check if this is the correct control 
     if (ctr is DomainUpDown) 
     { 
      // store it's reference 
      domainUpDown = (DomainUpDown)ctr; 
      break; 
     } 
    } 
    // if we have found the control 
    if (domainUpDown != null) 
    { 
     textArea.SelectionLength = 0; 
     Debug.WriteLine(domainUpDown.SelectedIndex); 
     Debug.WriteLine(domainUpDown.SelectedItem); 
     // use the SelectedItem 
     textArea.SelectedText = string.Format("margin-top: {0} ; \n,", domainUpDown.SelectedItem); 
    } 
} 

如果你有你的表格上,你最好加一个唯一的名称,他们每个人的多个控件:

DomainUpDown marginRightVal = new DomainUpDown(); 
marginRightVal.Location = new Point(150, 100); 
marginRightVal.Size = new Size(42, 40); 
marginRightVal.Name = "right"; 
frm.Controls.Add(marginRightVal); 

,当你遍历控件集合,你可以检查该名:

foreach(var ctr in frm.Controls) 
{ 
    // check if this is the correct control 
    if (ctr is DomainUpDown) 
    { 
     // store it's reference 
     domainUpDown = (DomainUpDown)ctr; 
     if (domainUpDown.Name == "right") 
     { 
      // do logic for that value 
     } 
    } 
} 

或者你可以使用Find method

var found = frm.Controls.Find("right", false); 
if (found.Length>0) 
{ 
    var rightDomain = (DomainUpDown)found[0]; 
    // do logic here 
} 
+0

谢谢@rene!它帮助了很多!现在我必须再添加3个DomainUpDowns,但我想我已经明白了! –