如何实现抽奖时身份证号码不断滚动呢?

hmucheng 2006-07-24 03:07:08
从数据库中读取身份证信息,然后用一个label 实现不断滚动。按停止的时候选择当前的身份证号码,用c#应该如何实现呢?谢谢!@
...全文
2082 23 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
cnstar9988 2006-07-26
  • 打赏
  • 举报
回复
同意Mark2Win的说话, 程序必须公平!

必须每次随机选择N个!
hmucheng 2006-07-24
  • 打赏
  • 举报
回复
晕了,真是太笨,总算明白什么意思了。谢谢马克及各位的指点
Mark2Win 2006-07-24
  • 打赏
  • 举报
回复
timer下面的tick事件 中如果写 for(int i=0;i<=5000:i++){lable1.text=i.tostring()}
然后在按钮中触发tick。lable中只显示5000。也不滚动啊。
______________________

当然不会滚, 原因是太快了, 每一次tick事件被触发的时候都让label从1到5000显示共5000次,由于太快只能看到5000了, 应该是在tick事件之外定义一个全局变量i, 然后在tick事件里这么写:

if(i>5000){timer1.enable=false;}
else
{
label1.text=i.tostring();
i+ = 1;
}

看来楼主还是没有理解timer的概念
hmucheng 2006-07-24
  • 打赏
  • 举报
回复
timer下面的tick事件 中如果写 for(int i=0;i<=5000:i++){lable1.text=i.tostring()}
然后在按钮中触发tick。lable中只显示5000。也不滚动啊。
ashiw 2006-07-24
  • 打赏
  • 举报
回复
内定号码。瞎滚忽悠一下就可以了。要不然做一个不停滚的效果,然后随机抽到某号码。停,显示抽到的号码。
Mark2Win 2006-07-24
  • 打赏
  • 举报
回复
对了鉴于公平起见, 楼主最好随机选号, 也就是每次从datatable里选的时候用随机函数生成的行去去数据

this.lable1.text=DataTable.rows[frand(DataTable.Rows.Count())]["身份证号"].tostring();//frand(DataTable.Rows.Count())的意思是返回一个从0到datatable行数之间的随机整数, 你自己去写吧
Mark2Win 2006-07-24
  • 打赏
  • 举报
回复
把选号的代码放到timer的Tick事件下面, 然后设置timer的刷新时间, 比如500, 那么每隔0.5s系统就会执行一次timer下面的tick事件一次, 也就是执行选号一次.

至于你怎么写选号, 当然不能每一次都要到数据库里面去选, 这样慢死你; 应该先把身份证这列的数据从数据库取出来放到一个datatable里, 选号的时候从这个datatable里面选.

______________

如果是开发组件, 那么楼主也要考虑一下楼上有位说的作弊的情况, 就是一开始就选好号, 然后每次滚动都是走过场, 这样也很好做, 也可以把数据全放到datatable中, 停止的时候显示设定好的号即可.
Yellow198267 2006-07-24
  • 打赏
  • 举报
回复
至于循环的具体控制不知道是不是合适,没仔细考虑呢。忙~~~~~~~~~~~~
Yellow198267 2006-07-24
  • 打赏
  • 举报
回复
还是一次读出再循环显示,不要循环读数据库,那样会很慢吧。
for(int i=0;i<=ds.tables[0].rows.count-1;i++)
{
if(i=ds.tables[0].rows.count)i=0;
this.lable1.text=ds.tables[0].rows[i]["num"].tostring();
}
最好用一个thread来控制开始和结束。
yingfeiqiyue 2006-07-24
  • 打赏
  • 举报
回复
说得差不多了
ofei 2006-07-24
  • 打赏
  • 举报
回复
timer不是每隔一定时间就触发一次吗?

触发时会产生事件嘛
把数据显示功能放到timer的事件处理方法中就可以了

晕了!
CmUpDate 2006-07-24
  • 打赏
  • 举报
回复
timer不是每隔一定时间就触发一次吗?
在 timer 中放一个变量,每次加1,作为lable逐条显示的索引
hmucheng 2006-07-24
  • 打赏
  • 举报
回复
从数据库中读取数据我是用sqldatareader,然后用while(sdr.read()) 逐条读出,但是怎么和timer相结合呢?timer不是每隔一定时间就触发一次吗?但如何将读出来的数据用lable逐条显示呢?
Teng_s2000 2006-07-24
  • 打赏
  • 举报
回复
Up...
jacobwc 2006-07-24
  • 打赏
  • 举报
回复
汗一个楼上的
CmUpDate 2006-07-24
  • 打赏
  • 举报
回复
以前做过一个,是手机号码的

就是随机数字在那里滚动,除了前面的 1##########
其实中奖号码早就选择好了,
就是
第一位 滚着滚着停了
第二位 滚着滚着停了
。。。
第十一位 滚着滚着停了

就那么停了,其实号码是别人填写的,更本就没有数据库
jacobwc 2006-07-24
  • 打赏
  • 举报
回复
将读取的身份证号放在DataSet,当然不是timer了
然后将Label绑定到dataset
timer看下MSDN就OK了
下面的示例实现简单的间隔计时器,该计时器每五秒钟发一次警报。当发生警报时,MessageBox 显示该警报已激活的次数合计并询问用户计时器是否应继续运行。

public class Class1 {
static System.Windows.Forms.Timer myTimer = new System.Windows.Forms.Timer();
static int alarmCounter = 1;
static bool exitFlag = false;

// This is the method to run when the timer is raised.
private static void TimerEventProcessor(Object myObject,
EventArgs myEventArgs) {
myTimer.Stop();

// Displays a message box asking whether to continue running the timer.
if(MessageBox.Show("Continue running?", "Count is: " + alarmCounter,
MessageBoxButtons.YesNo) == DialogResult.Yes) {
// Restarts the timer and increments the counter.
alarmCounter +=1;
myTimer.Enabled = true;
}
else {
// Stops the timer.
exitFlag = true;
}
}

public static int Main() {
/* Adds the event and the event handler for the method that will
process the timer event to the timer. */
myTimer.Tick += new EventHandler(TimerEventProcessor);

// Sets the timer interval to 5 seconds.
myTimer.Interval = 5000;
myTimer.Start();

// Runs the timer, and raises the event.
while(exitFlag == false) {
// Processes all the events in the queue.
Application.DoEvents();
}
return 0;
}
}
jiezhi 2006-07-24
  • 打赏
  • 举报
回复
到msdn中看看timer的用法吧.数据怎么能放到timer里面呢?当然是显示在lable里了.
hmucheng 2006-07-24
  • 打赏
  • 举报
回复
qq:16077760 望指教
cangwu_lee 2006-07-24
  • 打赏
  • 举报
回复
怎么帮呢?!
加载更多回复(3)

111,094

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧