C# 如何获得自己类的父级?

C# 如何获得自己类的父级?,c#,class,parent-child,C#,Class,Parent Child,我创建了一个大致简单的类,看起来是这样的: public class PreviewItem { public string ItemName { get; set; } public Point PreviewStartingPoint { get; set; } public Point ReleaseStartingPoint { get; set; } public double PreviewWidth { get; set; } public

我创建了一个大致简单的类,看起来是这样的:

public class PreviewItem
{
    public string ItemName { get; set; }
    public Point PreviewStartingPoint { get; set; }
    public Point ReleaseStartingPoint { get; set; }
    public double PreviewWidth { get; set; }
    public double PreviewHeight { get; set; }
    public double ReleaseWidth { get; set; }
    public double ReleaseHeight { get; set; }
    public Border PreviewBorder { get; set; }
    public DispatcherTimer ShowTimer { get; set; }
    public int ShowIndex { get; set; }
    public List<MarketingItemNode> HandleList { get; set; }
}
现在我已经给了计时器一个正常的滴答声事件。当事件激发时,我想找到发送方的“PreviewItem”。 大概是这样的:

private void ShowNextItem(object sender, EventArgs eventArgs)
{
    DispatcherTimer thisTimer = (DispatcherTimer) sender;
    PreviewItem thisItem = (PreviewItem) thisTimer.Parent;
    ...
}

但是这个计时器没有父对象。我怎样才能让全班同学都参加打勾活动?

也许是这样的

previewItem.ShowTimer = new DispatcherTimer
            {
                Interval = TimeSpan.FromMilliseconds(previewItem.HandleList[0].Duration),
                Tag = previewItem
            };
            previewItem.ShowTimer.Tick += ShowNextItem;
            previewItem.ShowTimer.Start();



private void ShowNextItem(object sender, EventArgs eventArgs)
    {
        DispatcherTimer thisTimer = (DispatcherTimer) sender;
        PreviewItem thisItem = (PreviewItem) thisTimer.Tag;
        ...
    }

也许是这样的也许

previewItem.ShowTimer = new DispatcherTimer
            {
                Interval = TimeSpan.FromMilliseconds(previewItem.HandleList[0].Duration),
                Tag = previewItem
            };
            previewItem.ShowTimer.Tick += ShowNextItem;
            previewItem.ShowTimer.Start();



private void ShowNextItem(object sender, EventArgs eventArgs)
    {
        DispatcherTimer thisTimer = (DispatcherTimer) sender;
        PreviewItem thisItem = (PreviewItem) thisTimer.Tag;
        ...
    }

您可以按照建议使用
标记
属性,或使用子类
Dispatchermer

public class MyDispatcherTimer : DispatcherTimer
{
    public MyDispatcherTimer(PreviewItem parent)
    {
        ....
    }
}

您可以按照建议使用
标记
属性,或使用子类
Dispatchermer

public class MyDispatcherTimer : DispatcherTimer
{
    public MyDispatcherTimer(PreviewItem parent)
    {
        ....
    }
}

或者您可以内联该方法:

previewItem.ShowTimer = new DispatcherTimer
{
    Interval = TimeSpan.FromMilliseconds(previewItem.HandleList[0].Duration)
};

previewItem.ShowTimer.Tick += (s, ee) =>
{
    // create your logic for the tick event here:
    previewItem.DoSomething();
};

previewItem.ShowTimer.Start();

但是,如果需要在类中声明计时器:
public dispatchermer ShowTimer{get;set;}
最好让类自行处理计时器

您可以创建一个创建计时器的构造函数

public class PreviewItem
{
   public string ItemName { get; set; }
   public Point PreviewStartingPoint { get; set; }
   public Point ReleaseStartingPoint { get; set; }
   public double PreviewWidth { get; set; }
   public double PreviewHeight { get; set; }
   public double ReleaseWidth { get; set; }
   public double ReleaseHeight { get; set; }
   public Border PreviewBorder { get; set; }
   public DispatcherTimer ShowTimer { get; private set; }   //  <-- private set
   public int ShowIndex { get; set; }
   public List<MarketingItemNode> HandleList { get; set; }

   public PreviewItem()
   {
       ShowTimer = new DispatcherTimer
       {
            Interval = TimeSpan.FromMilliseconds(previewItem.HandleList[0].Duration)
       };
       ShowTimer.Tick += ShowNextItem;
   }

   private void ShowNextItem(object sender, EventArgs eventArgs)
   {
        DispatcherTimer thisTimer = (DispatcherTimer) sender;
        PreviewItem thisItem = this;   // <-- for example, because you're in the object itself...
        ...
   }
}
但这意味着每个
PreviewItem
都有自己的计时器(我认为
dispatchermer
不应该在这个类中)


我认为更好的方法是创建一个计时器来处理所有实例。(迭代
PreviewItem
s的列表)

或者您可以内联该方法:

previewItem.ShowTimer = new DispatcherTimer
{
    Interval = TimeSpan.FromMilliseconds(previewItem.HandleList[0].Duration)
};

previewItem.ShowTimer.Tick += (s, ee) =>
{
    // create your logic for the tick event here:
    previewItem.DoSomething();
};

previewItem.ShowTimer.Start();

但是,如果需要在类中声明计时器:
public dispatchermer ShowTimer{get;set;}
最好让类自行处理计时器

您可以创建一个创建计时器的构造函数

public class PreviewItem
{
   public string ItemName { get; set; }
   public Point PreviewStartingPoint { get; set; }
   public Point ReleaseStartingPoint { get; set; }
   public double PreviewWidth { get; set; }
   public double PreviewHeight { get; set; }
   public double ReleaseWidth { get; set; }
   public double ReleaseHeight { get; set; }
   public Border PreviewBorder { get; set; }
   public DispatcherTimer ShowTimer { get; private set; }   //  <-- private set
   public int ShowIndex { get; set; }
   public List<MarketingItemNode> HandleList { get; set; }

   public PreviewItem()
   {
       ShowTimer = new DispatcherTimer
       {
            Interval = TimeSpan.FromMilliseconds(previewItem.HandleList[0].Duration)
       };
       ShowTimer.Tick += ShowNextItem;
   }

   private void ShowNextItem(object sender, EventArgs eventArgs)
   {
        DispatcherTimer thisTimer = (DispatcherTimer) sender;
        PreviewItem thisItem = this;   // <-- for example, because you're in the object itself...
        ...
   }
}
但这意味着每个
PreviewItem
都有自己的计时器(我认为
dispatchermer
不应该在这个类中)


我认为更好的方法是创建一个计时器来处理所有实例。(迭代
PreviewItem
s的列表)

可能使用
DispatcherTimer.Tag
属性来存储父级?所有方法都有效,但使用标记是最简单的方法。感谢您的回答。也许可以使用
dispatchermer.Tag
属性来存储父级?所有方法都可以使用,但使用标记是最简单的方法。谢谢你的回答。我正要写类似的东西。使用内联处理程序,您可以从设置处理程序的作用域中捕获任何您想要的内容,并将其传递到您想要它去的任何地方。这是一个好方法,但不,您确实需要为每个预览设置一个自己的计时器,因为它们都在不同的时间使用不同的内容更改内容。只用一个计时器几乎是不可能的。我正要写类似的东西。使用内联处理程序,您可以从设置处理程序的作用域中捕获任何您想要的内容,并将其传递到您想要它去的任何地方。这是一个好方法,但不,您确实需要为每个预览设置一个自己的计时器,因为它们都在不同的时间使用不同的内容更改内容。只用一个计时器几乎是不可能的。