如何使用调度计时器和消息框创建幸运抽奖(除了调度计之外的任何其他建议也值得赞赏!) [英] how do I create a lucky draw using dispatch timer and messagebox(Any other suggestion on methods other than dispatchtimer is appreciated too!)

查看:69
本文介绍了如何使用调度计时器和消息框创建幸运抽奖(除了调度计之外的任何其他建议也值得赞赏!)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

嗨!因为我目前还在学习,我正在研究的项目需要一个幸运抽奖轮。我已将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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆