如何使用调度计时器和消息框创建幸运抽奖(除了调度计之外的任何其他建议也值得赞赏!) [英] how do I create a lucky draw using dispatch timer and messagebox(Any other suggestion on methods other than dispatchtimer is appreciated too!)
问题描述
嗨!因为我目前还在学习,我正在研究的项目需要一个幸运抽奖轮。我已将WPF集成到我的Windows窗体项目中。目前我的WPF加载事件被写为(下面的代码),之后我需要一个按钮,当点击时在3-10秒之间随机旋转
并提示一个消息框提示用户奖品(从数据库中提取)他/她赢了。谢谢! (欢迎使用其他方法进行任何建议!)
private void Grid_Loaded(object sender,RoutedEventArgs e)
      {
          myMediaElement.Play();
          var da = new DoubleAnimation(0,360,new Duration(TimeSpan.FromSeconds(6)));
          var rt = new RotateTransform();
          ellipse.RenderTransform = rt;
          ellipse2.RenderTransform = rt;
          Spin.RenderTransform = rt;
          ellipse.RenderTransformOrigin = new Point(0.5,0.5);
          ellipse2.RenderTransformOrigin = new Point(0.5,0.5);
          Spin.RenderTransformOrigin = new Point(0.5,0.5);
          da.RepeatBehavior = RepeatBehavior.Forever;
          rt.BeginAnimation(RotateTransform.AngleProperty,da);
}
我试过用过故事板(如下所示)在按钮上完成后,它只是提示一个消息框说'祝贺你赢了!'
< EventTrigger RoutedEvent =" Button.Click">
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; < BeginStoryboard>
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; < Storyboard x:Name =" Mystoryboard"完成= QUOT; Mystoryboardcompleted" FillBehavior =" Stop">
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; < DoubleAnimation Storyboard.TargetName =" ellipse"
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; Storyboard.TargetProperty = QUOT;(UIElement.RenderTransform)(RotateTransform.Angle)"。 AutoReverse =" False"
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; AccelerationRatio = QUOT 1 QUOT;持续时间=" 0:0:4英寸通过= QUOT; 2000" />
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; < DoubleAnimation Storyboard.TargetName =" ellipse"
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; Storyboard.TargetProperty = QUOT;(UIElement.RenderTransform)(RotateTransform.Angle)"。 AutoReverse =" False"
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; DecelerationRatio = QUOT 1 QUOT;持续时间=" 0:0:4英寸通过= QUOT; 1200" />< / Storyboard>
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; < / BeginStoryboard>
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; < / EventTrigger>
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; < /Button.Triggers>
嗨DerpyShaun,
首先将相关用户添加到列表< KeyValuePair < int ,
string > >。
int angle = 5040;
for(int i = 0; i< 8; i)
{//
angle + = 45;
_ListAngle.Add(angle);_ListUser.add( new KeyValuePair < int , string >( angle , 用户名 ),
)
}其次,您可以通过角度键检索相关的用户名。
int _Index = 0;
int _OldAngle = 0;
private void btnStartTurntable_Click(object sender,RoutedEventArgs e)
{
btnStartTurntable.IsEnabled = false;
_Index = _Random.Next(0,8);
Storyboard sb =(故事板)this.FindResource(" zhuandong");
sb.Completed - = this.sb_Completed;
sb.Completed = new EventHandler(sb_Completed);
((SplineDoubleKeyFrame)((DoubleAnimationUsingKeyFrames)sb.Children [0])。KeyFrames [0])。Value = _OldAngle;
((SplineDoubleKeyFrame)((DoubleAnimationUsingKeyFrames)sb.Children [0])。KeyFrames [3])。Value = _ListAngle [_Index];
sb.Begin();
}
void sb_Completed(对象发送者,EventArgs e)
{
DispatcherTimer dt = new DispatcherTimer();
dt.Interval = TimeSpan.FromSeconds(0.3);
dt.Tick =委托
{
dt.Stop();
_OldAngle =(_ ListAngle [_Index]%360);
btnStartTurntable.IsEnabled = true;//通过角度列表的索引提醒相关消息。
// AwardProcess(GetAward(_ListAngle [_Index]));
};
dt.Start();
}祝你好运,
张龙
Hi! Because I am currently still learning, a project that I am working on requires a lucky draw wheel. I have integrated a WPF into my windows form project. Currently my WPF load event is written as(code below), after that i need a button when clicked spins randomly between 3-10 seconds and prompts a messagebox that prompts user a prize(extracted from database) that he/she has won. thank you! (Any suggestion on how i can use other method to do this is welcome!)
private void Grid_Loaded(object sender, RoutedEventArgs e)
{
myMediaElement.Play();
var da = new DoubleAnimation(0, 360, new Duration(TimeSpan.FromSeconds(6)));
var rt = new RotateTransform();
ellipse.RenderTransform = rt;
ellipse2.RenderTransform = rt;
Spin.RenderTransform = rt;
ellipse.RenderTransformOrigin = new Point(0.5, 0.5);
ellipse2.RenderTransformOrigin = new Point(0.5, 0.5);
Spin.RenderTransformOrigin = new Point(0.5, 0.5);
da.RepeatBehavior = RepeatBehavior.Forever;
rt.BeginAnimation(RotateTransform.AngleProperty, da);
}
I have tried using a storyboard(shown below) on a button however after it is done, it just prompts a messagebox saying 'congratulations you have won!'
<EventTrigger RoutedEvent="Button.Click"><BeginStoryboard>
<Storyboard x:Name="Mystoryboard" Completed="Mystoryboardcompleted" FillBehavior="Stop">
<DoubleAnimation Storyboard.TargetName="ellipse"
Storyboard.TargetProperty="(UIElement.RenderTransform).(RotateTransform.Angle)" AutoReverse="False"
AccelerationRatio="1" Duration="0:0:4" By="2000" />
<DoubleAnimation Storyboard.TargetName="ellipse"
Storyboard.TargetProperty="(UIElement.RenderTransform).(RotateTransform.Angle)" AutoReverse="False"
DecelerationRatio="1" Duration="0:0:4" By="1200" /></Storyboard>
</BeginStoryboard>
</EventTrigger>
</Button.Triggers>
Hi DerpyShaun,
Firstly add related user to a List<KeyValuePair<int, string>>.
int angle = 5040; for (int i = 0; i < 8; i ) {
// angle += 45; _ListAngle.Add(angle);
_ListUser.add(new KeyValuePair<int, string>(angle, username),
) }Secondly, you could retrieve related username via the key of angle.
int _Index = 0; int _OldAngle = 0; private void btnStartTurntable_Click(object sender, RoutedEventArgs e) { btnStartTurntable.IsEnabled = false; _Index = _Random.Next(0, 8); Storyboard sb = (Storyboard)this.FindResource("zhuandong"); sb.Completed -= this.sb_Completed; sb.Completed = new EventHandler(sb_Completed); ((SplineDoubleKeyFrame)((DoubleAnimationUsingKeyFrames)sb.Children[0]).KeyFrames[0]).Value = _OldAngle; ((SplineDoubleKeyFrame)((DoubleAnimationUsingKeyFrames)sb.Children[0]).KeyFrames[3]).Value = _ListAngle[_Index]; sb.Begin(); } void sb_Completed(object sender, EventArgs e) { DispatcherTimer dt = new DispatcherTimer(); dt.Interval = TimeSpan.FromSeconds(0.3); dt.Tick = delegate { dt.Stop(); _OldAngle = (_ListAngle[_Index] % 360); btnStartTurntable.IsEnabled = true;
//alert related message via Angle list's index. //AwardProcess(GetAward(_ListAngle[_Index])); }; dt.Start(); }
Best regards,
Zhanglong
这篇关于如何使用调度计时器和消息框创建幸运抽奖(除了调度计之外的任何其他建议也值得赞赏!)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!