2013-05-03 47 views
1

我不知道怎么说这个,我有3个datagridview控件(名为datagridview1,datagridview2 & datagridview3)。我的问题是我可以连接这些控件的名称吗?C#中的连接控件名称

我的意思是有没有办法,我可以这样调用它:我使用的WinForms datagridview(n) or datagridview + n

在此先感谢!

+0

为什么你需要这样做?如果你的建筑物动态地控制着,那么我可以指出这一点,否则就像Tim提到的那样使用可读的名字。 – Derek 2013-05-03 10:13:12

+3

使用与其用途相关的有意义的名称。 – 2013-05-03 10:13:35

+0

我有3个tabpage,每个tabpage包含一个datagridview,我想调用当前tabpage中的datagridview,并且我不想每次更改tabpage时调用这些datagridview的名称。 – NickSharp 2013-05-03 10:18:25

回答

0

我想你想要的是用动态名称找到控件吗?

像这样的东西可能:

Control match = ParentControl.Controls["datagridview" + n]; 

因此,如果例如您的所有数据网格都处于了名为 “myPanel” 单面板,那么你可以这样做:

DataGridView match = MyPanel.Controls["datagridview" + n] as DataGridView; 

但是,如果您的数据网格不全部属于相同的父级控件,则可以使用以下方法找到它们:

DataGridView match = this.Controls.Find("datagridview" + n, true)[0] as DataGridView; 

注意:Controls.Find方法返回一个数组,因此您需要选择第一个元素(假设您的控件名称是唯一的),它也可能值得检查数组是否有任何值,然后尝试访问第一个元素。


如果你想换行的功能,你可以这样做:

public DataGridView GetDataGridViewForTabNumber(int n){ 
    Control[] matches = this.Controls.Find("datagridview" + n, true); 
    if(matches.length == 0) 
     return null; 
    return matches[0] as DataGridView; 
} 

,并调用它像这样:

DataGridView dgv = GetDataGridViewForTabNumber(1);//gets datagridview1 

注意:这是一个如果您在运行时动态创建DataGridView控件,则该方法非常有效。但是,如果你是在设计师那里创建它们,就像Tim说的那样,你应该给他们一个更有意义的名字并直接引用它们。

+0

我在设计师中创建它们,我希望我的代码变得简单。我有3个tabpage,每个tabpage包含一个datagridview,所以我有一个变量n,该值是基于当前tabpage的,所以当tabpage改变时,变量值也会改变,我想使用像datagridview + n这样的变量。有可能吗? – NickSharp 2013-05-03 10:21:43

+0

@ user2061086:简单代码?然后,只需使用控件的名称来访问它,'datagridview1.CallSomething();' – musefan 2013-05-03 10:25:06

+0

@ user2061086:是的,这是可能的,我的代码解释说,确切地说 – musefan 2013-05-03 10:25:35

0

尝试这个

的DataGridView DG =(DataGridView中)this.Controls.Find( “datagridview的” + n.ToString(),TRUE);