Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在C中动态分配对象名?_C#_Generics_Dynamic - Fatal编程技术网

C# 如何在C中动态分配对象名?

C# 如何在C中动态分配对象名?,c#,generics,dynamic,C#,Generics,Dynamic,我想通过鼠标单击创建类的对象,然后将某些值保存到我以后要检索的值中 现在我使用的是dynamic关键字,它与单击和插入配合得很好,但之后我想检索那些保存的对象,它们不止一个,因此如果使用索引,它不允许我将其用于dynamic类型的对象 我的类名是Container,它是一个用户控件。我想在tablelayoutpanel上的另一个类中显示鼠标单击 dynamic expando = new Container(); int counter = 0; private void tableLay

我想通过鼠标单击创建类的对象,然后将某些值保存到我以后要检索的值中

现在我使用的是dynamic关键字,它与单击和插入配合得很好,但之后我想检索那些保存的对象,它们不止一个,因此如果使用索引,它不允许我将其用于dynamic类型的对象

我的类名是Container,它是一个用户控件。我想在tablelayoutpanel上的另一个类中显示鼠标单击

dynamic expando = new Container(); 
int counter = 0;

private void tableLayoutPanel1_MouseClick(object sender, MouseEventArgs e)
{
    var pt = new Point(e.X, e.Y);
    var colWidths = this.MatrixPanel.GetColumnWidths();
    var rowHeights = this.MatrixPanel.GetRowHeights();
    int col = -1, row = -1;
    int offset = 0;

    for (int iCol = 0; iCol < this.MatrixPanel.ColumnCount; ++iCol)
    {
        if (pt.X >= offset && pt.X <= (offset + colWidths[iCol]))
        {
            col = iCol;
            break;
        }
        offset += colWidths[iCol];
    }
    offset = 0;

    for (int iRow = 0; iRow < this.MatrixPanel.RowCount; ++iRow)
    {
        if (pt.Y >= offset && pt.Y <= (offset + rowHeights[iRow]))
        {
            row = iRow;
            break;
        }
        offset += rowHeights[iRow];
    }
    expando.Name = "Count" + counter;
    MatrixPanel.Controls.Add(expando, col, row);

    expando.setposition(row, col);
    expando.SetChannel(click.ToString());

    counter++;
}
现在,当我必须检索这些保存的值时,我必须使用expando列表或数组。我如何声明类型容器列表以及动态

 private void masterTab1_ItemSelected(object sender, object selectedValue)
 {     
    var positions = Adapter.getPositions(RackID);

    for (int i = 0; i < positions.Count; i++)
    {
        MatrixPanel.Controls.Add(expando, positions.ElementAt(i).Y, positions.ElementAt(i).X); // Here I want to use expando[i]

        expando.setposition(positions.ElementAt(i).X, positions.ElementAt(i).Y); // Here I want to use expando[i]
        expando.SetChannel(positions.ElementAt(i).Channel.ToString()); // Here I want to use expando[i]
    }
 }
我的问题有点像,但如果我使用new关键字,那么我将如何调用容器函数,因为我不知道新创建的对象的名称

谁知道我怎么才能做到这一点


您正在全局范围内创建一个对象,并将此expando添加到MatrixPanel。但这将向MatrixPanel添加相同的项。因此,您应该在本地范围内创建一个对象,并将其添加到MatrixPanel

Object objControl = MatrixPanel.Controls[index];
我的意思是在*TableLayoutPanel 1\u MouseClick*事件中创建一个对象并将其添加到MatrixPanel。在那个地方,你用你的计数器加上一些字符串来命名它

//Instead of this line
expando.Name = "Count" + counter;

//Add this
dynamic expando1 = new Container(); 
expando1.Name = "Count" + counter;
可以使用控件数组获取添加到ParentControlMatrixPanel的控件

Object objControl = MatrixPanel.Controls[index];

像这样,你必须找到控制装置。但对于这一点,您需要索引。因此,请确保您知道索引。

但问题是我还必须在另一个函数中使用它。是的。您已将其添加到父面板。因此,您可以访问控件。你试过了吗?是的,我试过了,但是有没有办法创建一个类型容器和动态容器的列表?就插入而言,它工作正常,但当我必须向UI显示所有创建的对象时,我必须使用expando[I],这是不允许的:/你可以创建一个容器列表。控件是控件数组。如果你能用这个。你能告诉我语法吗?我将如何使用这个?