矩形形状事件以编程方式

时间:2012-03-24 19:06:32

标签: c# events windows-forms-designer delegation

public class Car
{
  public string StreetName;
  public RectangleShape Car_Shape;
  public int ArrivalTime, Axis, Lane;
  public string Direction;
  public double Car_Delay;
  public bool Mobile;
  public Stopwatch Sw = new Stopwatch();
  public Car(int ArriT)
  {
      ArrivalTime = ArriT;
  }
  public void SetDelay()
  {
  }
}

这是代码,我在为主窗体上的ShapeContainer创建实例“Car”时添加每个矩形形状,我想要做的是当我按下任何形状时,显示与此形状相关的数据在文本框中,如“方向”或“延迟”我试图使用委托,我做了一个事件,但我不能通过参数...

非常感谢

2 个答案:

答案 0 :(得分:0)

使用可视功率包实现事件的Rectangle形状类,或者只是为Rectangle创建用户控件并简单地监听click事件。要识别哪个车适合矩形你可以保存字典,但这很难看,或者你可以让汽车本身也是一个用户控件来监听矩形的点击事件并调用它自己的点击事件,这样你就可以访问所有汽车的属性通过事件的发件人参数。

答案 1 :(得分:0)

(抱歉我的英语不好)

你的RectangleShape是否会引发Click或MouseDownEvents? 如果是这样,您可以执行以下操作:

public class Car
{
    public string StreetName;
    public RectangleShape Car_Shape;
    public int ArrivalTime, Axis, Lane;
    public string Direction;
    public double Car_Delay;
    public bool Mobile;
    public Stopwatch Sw = new Stopwatch();

    public Action<Car> ShapeClicked;

    public Car(int ArriT, Action<Car> shapeClicked)
    {
        ArrivalTime = ArriT;
        this.ShapeClicked = shapeClicked;

        Car_Shape.Click += (sd,args) =>
        {
            if (Clicked != null)
                Clicked(this);
        };

    }
    public void SetDelay()
    {
    }
}

使用很简单:

Car car = new Car(0, OnShapeClicked);

public void OnShapeClicked(Car car)
{
    MessageBox.Show(car.Direction); 
}

Car car = new Car(0, (c) => 
{ 
    MessageBox.Show(c.Direction); 
});