如何在C#winForm中通过主窗体通过面板访问usercontrol类的方法/属性

时间:2018-12-20 09:43:03

标签: c# winforms user-controls panel

在我的项目中,我创建了具有属性的usercontrol。此userControl以主要形式添加到Panel控件中。我希望该属性值出现在主窗体按钮单击事件中。

用户控制类代码:

  public partial class uc_protectionTbl1 : UserControl
  {
     public string obsValue { get; set; }
  }

主窗体类代码:

  public partial class MainForm : Form
  {

    public MainForm()
    {
        InitializeComponent();
        addUserControl();
    }
    private void addUserControl()
    {
       uc_protectionTbl1 objUC = new uc_protectionTbl1();
       panelUC.Controls.Add(objUC);
    }
    private void SavetoolStripMenuItem1_Click(object sender, EventArgs e)
    {
         //Here I want this property value     
    }

我尝试使用foreach循环从面板获取控件,但是如何获取属性值?

我尝试过

     private void SavetoolStripMenuItem1_Click(object sender, EventArgs e)
     {
        string testValue;    

        foreach (Control p in panelUC.Controls)
        {  
            if (p is uc_protectionTbl1) 
            { 
               testValue =       //test value is the value from property
            }
        }
     }

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用LINQ来获得对控件的强类型引用:

var myControl = panelUC.Controls.OfType<uc_protectionTbl1>().FirstOrDefault();
string testValue = myControl?.obsValue;

请注意,testValue可能是null-您应进行检查。

我还建议您使用C#代码样式,其中所有类型和方法都使用PascalCase(即以大写字母开头)。