我想在鼠标单击时创建类的对象,然后将某些值保存到我想要检索的值中。
现在我正在使用动态关键字,它适用于点击和插入但之后我想要检索那些保存的对象,它们不止一个,所以如果使用索引它不允许我使用对于动态类型的对象。
我的班级名称是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列表或数组如何声明Container类型和动态类型的列表?
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]
}
}
我的问题与C#, dynamic object names?有点相同,但如果我使用new关键字,那么我将如何调用Container函数,因为我不知道新创建的对象的名称?
有谁知道我怎么能这样做?
答案 0 :(得分:0)
您正在全局范围内创建一个对象并添加此&#34; expando &#34;到&#34; MatrixPanel &#34;。但是这会将相同的项目添加到&#34; MatrixPanel&#34;。因此,您应该在本地范围内创建对象,并将广告创建到&#34; MatrixPanel &#34;。
我的意思是在* tableLayoutPanel1_MouseClick *事件中创建一个obhect并将其添加到 MatrixPanel 。在那个地方,你用计数器和一些字符串命名。
//Instead of this line
expando.Name = "Count" + counter;
//Add this
dynamic expando1 = new Container();
expando1.Name = "Count" + counter;
您可以使用控制数组来获取添加到ParentControl的控件(&#34; MatrixPanel&#34;)。
Object objControl = MatrixPanel.Controls[index];
像这样你必须找出控件。但为此你需要索引。所以一定要知道索引。