我希望能够引用列表并查看所有方法,以及从其他类中更改列表的内容。
以下是声明:
public partial class TestSheet : UserControl
{
public ShapeCollection _shapes = new ShapeCollection();
}
这是ShapeCollection类:
/// <summary>
/// Manages a collection of shape objects
/// </summary>
public class ShapeCollection : CollectionBase
{
public void Add(Shape s)
{
List.Add(s);
}
public void Remove(Shape s)
{
List.Remove(s);
}
public Shape this[int index]
{
get { return (Shape)List[index]; }
set { List[index] = value; }
}
}
我可以使用:
来引用_shapesthis._shapes.Add(s);
或:
foreach (Shape s in this._shapes)
{
//some code
}
或表格上的索引:
Shape shp;
shp = (Shape)testSheet1._shapes[TestSheet.selectedShapeNumber];
唯一可以引用_shapes的类是UserControl所在的表单和UserControl本身。 如何以不同方式声明_shapes,以便可以在其他类中引用和操作_shapes。我很难过。我知道这可能很简单。请帮忙。
答案 0 :(得分:1)
您的声明是正确的。问题在于你宣布它。现在,_shapes
是您TestSheet
的成员。如果您希望可以从其他位置访问您的集合,则应将声明移动到其他位置,例如作为表单的成员(而不是控件)。这样,任何引用表单的类都可以通过
myform._shapes.Add(s);
请记住,如果您希望每个表单可以访问多个TestSheet
,则可以使用相同的集合。如果您想要按TestSheet
单独收集,请保留现有的
答案 1 :(得分:0)
您必须将对_shape的引用传递给其他类,或者将对其容器(TestSheet)的引用传递给其他类。
这样的事情:
public class Manipulator {
private ShapeCollection shapes;
public Manipulator(ShapeCollection shapes) {
this.shapes = shapes;
}
public void doSomethingToShapes() {
shapes.add(...);
}
}
public static void main(String[] args) {
TestSheet testSheet = new TestSheet();
Manipulator manipulator = new Manipulator(testSheet._shapes);
...
}