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