C# 如何在C中动态分配对象名?
我想通过鼠标单击创建类的对象,然后将某些值保存到我以后要检索的值中 现在我使用的是dynamic关键字,它与单击和插入配合得很好,但之后我想检索那些保存的对象,它们不止一个,因此如果使用索引,它不允许我将其用于dynamic类型的对象 我的类名是Container,它是一个用户控件。我想在tablelayoutpanel上的另一个类中显示鼠标单击C# 如何在C中动态分配对象名?,c#,generics,dynamic,C#,Generics,Dynamic,我想通过鼠标单击创建类的对象,然后将某些值保存到我以后要检索的值中 现在我使用的是dynamic关键字,它与单击和插入配合得很好,但之后我想检索那些保存的对象,它们不止一个,因此如果使用索引,它不允许我将其用于dynamic类型的对象 我的类名是Container,它是一个用户控件。我想在tablelayoutpanel上的另一个类中显示鼠标单击 dynamic expando = new Container(); int counter = 0; private void tableLay
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],这是不允许的:/你可以创建一个容器列表。控件是控件数组。如果你能用这个。你能告诉我语法吗?我将如何使用这个?