PDA

View Full Version : Tạo đồng hồ trên Form - C# - Mong các anh em có ẽp giúp đỡ



quocbinhsg
04-03-2009, 10:10
Chào các bạn!

Hiện tại mình đang phát triển một minigame, có một vấn đề là mình muốn đặt một đồng hồ điện tử lên main form. Đồng hồ sẽ thực hiện tính năng tính giờ cho game, kể từ khi vào new game đến khi kết thúc (game over). Ở đây mình còn gặp khó khăn:

1- Mình nghe nói có thể nhúng mã Java Script vào C#.Net, vậy thì quá tốt rồi. Vì mình đã từng lập trình một đồng hồ đếm giờ với JS, nhưng mình ko biết cách nhúng vào C# thế nào, hiển thị lên form ra sao.

2 - Nếu làm trực tiếp từ C# thì nên thực hiện như thế nào để có một đồng hồ điện tử.

Mình rất cảm ơn các bạn đã quan tâm. Nếu bạn nào có source demo thì có thể cho mình xin dc ko ạ> thank you very much!

joga7785
04-03-2009, 16:08
trong c# Bạn kéo vào 1 cái timer
sau đó dùng thuộc tính tick

Private Sub timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles timer1.Tick
toolStripStatusLabel1.Text = System.DateTime.Now.ToString()
End Sub
tha hồ cho nó chạy.ok

serivn
04-03-2009, 17:16
trong c# Bạn kéo vào 1 cái timer
sau đó dùng thuộc tính tick

Private Sub timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles timer1.Tick
toolStripStatusLabel1.Text = System.DateTime.Now.ToString()
End Sub
tha hồ cho nó chạy.ok

Bạn nói vậy là có ý đúng, xong bạn ấy muốn có được thời gian chời game chứ không phải là thời gian hiện tại đâu nha.

Dưới đây là Code C# mình viết nè, bạn tham khảo nhé:



//Cho sự kiện khi bắt đầu New Game thì cho Timer1.Enabled=true;
//Khởi tạo thời gian bắt đầu chơi = thời gian hiện tại
DateTime start = DateTime.Now;

//Khi GameOver thì cho timer1.Enabled=false;
//Thời gian

private void timer1_Tick(object sender, EventArgs e)
{
DateTime passTime = DateTime.Parse((DateTime.Now - start).ToString());
label1.Text= passTime.ToLongTimeString().ToString();
}


Chúc bạn thành công nhé!!!:)

quocbinhsg
04-03-2009, 22:05
Cảm ơn hai bạn nhiều lắm, mình sẽ thử ngay.

ngankt2
31-08-2009, 03:51
Bạn có thể nhúng 1 cái timer và 1 cai label để hiển thị tgian vào Form
DoubleClick vào cái timer đó
nhúng đoạn code tương tự thế này

private void Timer1Tick(object sender, System.EventArgs e)
{
label.Text = DateTime.Now.ToLongTimeString();

}

đây là bản demo chương trình dùng timer của mình
http://www.mediafire.com/file/vdmokzilngz/Counter-Timer.rar
hoặc cũng có thể vào đây để tham khảo thêm :
http://www.download.com.vn/phan+mem+viet+nam/khac/12557_auto_control_power.aspx

linhberos
31-08-2009, 19:53
Theo mình thì làm thế này.
Khi bắt đầu bấm "Play" bắt đầu chơi game thì cho timer1.Enabled=true;
Ban đầu gán second=-1; minute=0;
Xử lý timer1_tick như sau:

Toàn bộ bài của mình đây bạn tham khảo nha
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Clock
{
public partial class Form1 : Form
{
int minute = 0;
int second = -1;

public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
timer1.Enabled = true;
}

private void timer1_Tick(object sender, EventArgs e)
{
second++;
label1.Text = minute.ToString() + " : " + second.ToString();
if (second == 59)
{
second = -1;
minute++;
}
}

Có nghĩa là cứ mỗi giây trôi qua đến khi second=59 thì nhảy sang phút mới. Lúc này tăng minute lên 1 và reset lại second là -1 để đếm số giây tiếp.
Chúc bạn thành công

HanSooSoo
31-08-2009, 21:17
Bạn nói vậy là có ý đúng, xong bạn ấy muốn có được thời gian chời game chứ không phải là thời gian hiện tại đâu nha.

Dưới đây là Code C# mình viết nè, bạn tham khảo nhé:



//Cho sự kiện khi bắt đầu New Game thì cho Timer1.Enabled=true;
//Khởi tạo thời gian bắt đầu chơi = thời gian hiện tại
DateTime start = DateTime.Now;

//Khi GameOver thì cho timer1.Enabled=false;
//Thời gian

private void timer1_Tick(object sender, EventArgs e)
{
DateTime passTime = DateTime.Parse((DateTime.Now - start).ToString());
label1.Text= passTime.ToLongTimeString().ToString();
}


Chúc bạn thành công nhé!!!:)


Chào serivn, cho mình hỏi câu ngoài lề chút xíu. Bạn làm cách nào khi viết bài trong frum những đoạn code bạn để trong cái richtextbox được vậy? Mình thấy một số bạn copy/paste vào. chúng thẳng hàng hết khó đọc quá. Làm như bạn thấy gọn, đẹp và dễ đọc hơn. Giúp mình nha!! Thanks..

serivn
31-08-2009, 22:11
Chào serivn, cho mình hỏi câu ngoài lề chút xíu. Bạn làm cách nào khi viết bài trong frum những đoạn code bạn để trong cái richtextbox được vậy? Mình thấy một số bạn copy/paste vào. chúng thẳng hàng hết khó đọc quá. Làm như bạn thấy gọn, đẹp và dễ đọc hơn. Giúp mình nha!! Thanks..

Thật ra thì mình không RichTextBox mà mình viết Code trong visual studio sau đó copy/Paste qua đây thôi. Thường thì mình có thói quen test code trong VS trước rồi mới post lên. Bạn có thể làm như vậy là okie!
Thân!:)

HanSooSoo
31-08-2009, 22:19
Thật ra thì mình không RichTextBox mà mình viết Code trong visual studio sau đó copy/Paste qua đây thôi. Thường thì mình có thói quen test code trong VS trước rồi mới post lên. Bạn có thể làm như vậy là okie!
Thân!:)

Ý mình muốn hỏi bạn là cái đoạn code mà bạn đưa lên nó được nằm trong richtextbox. Bạn làm cách nào được vậy??

xphuonga1
01-09-2009, 11:52
Ý mình muốn hỏi bạn là cái đoạn code mà bạn đưa lên nó được nằm trong richtextbox. Bạn làm cách nào được vậy??

Bạn chỉ cần thêm thẻ [ code ] mã nguồn [/code] nhớ là viết liền [code] nhé.

chieunt
03-09-2009, 13:09
Chào các bạn!

Hiện tại mình đang phát triển một minigame, có một vấn đề là mình muốn đặt một đồng hồ điện tử lên main form. Đồng hồ sẽ thực hiện tính năng tính giờ cho game, kể từ khi vào new game đến khi kết thúc (game over). Ở đây mình còn gặp khó khăn:

1- Mình nghe nói có thể nhúng mã Java Script vào C#.Net, vậy thì quá tốt rồi. Vì mình đã từng lập trình một đồng hồ đếm giờ với JS, nhưng mình ko biết cách nhúng vào C# thế nào, hiển thị lên form ra sao.

2 - Nếu làm trực tiếp từ C# thì nên thực hiện như thế nào để có một đồng hồ điện tử.

Mình rất cảm ơn các bạn đã quan tâm. Nếu bạn nào có source demo thì có thể cho mình xin dc ko ạ> thank you very much!

hi bạn :
- nếu bạn muốn nhúng mã JS vào C# thì nghiên cứu ClientScript.
- nếu bạn muốn làm trực tiếp bằng code C# thì nghiên cứu timer.
good luck !

serivn
03-09-2009, 23:06
Thời gian trước đó mình đã post một bài hướng dẫn bạn quocbinhsg làm đồng tính tính thời gian trong game, xong mình thấy cách đó còn chưa được đơn giản, nên mình đã tìm cách để có cách khác dễ dàng hơn cho các bạn như sau:

Như một số bạn đã nêu ở trên, chúng ta hoàn toàn có thể xử lý bằng cách kiểm soát..nếu giây = 60 thì tăng phút, tương tự,... cách này mìnth thường thấy trong javascript nhưng với .NET nó có một đối tượng có thể giúp chúng ta dễ dang hơn trong chuyện đó, đó là TimeSpan. Vd như đoạn code dưới đây:



//khởi tạo TimeSpan = 0
TimeSpan time = new TimeSpan(0, 0, 0);
private void button1_Click(object sender, EventArgs e)
{
//sự kiện khi bắt đầu game
timer1.Enabled = true;
}
private void timer1_Tick(object sender, EventArgs e)
{
//cập nhật lại thời gian
// Timer interval = 100 <=> 1 giây
//Tăng lên một giây cho TimeSpan
time = time.Add(new TimeSpan(0,0,1));

//Cập nhật lại giá trị cho textbox
textBox1.Text = time.Duration().ToString();
}


Thân!:)

itspkt08
27-11-2010, 16:56
mình thấy hình như đồng hồ chạy nhanh wá, làm thế nào để nó chạy chậm hơn,hay nói cách khac là dùng đúng với đồng hồ hệ thống.

[=========> Bổ sung bài viết <=========]

Không biết trong mục Interval thì mình phải chỉnh giá trị là bao nhiêu để nó chạy đúng giờ nhỉ

1clickloginsite
20-11-2013, 15:13
bạn ơi cho mình hỏi nếu mình muốn làm đồng hồ nhưng khi mình đặt thời gian vào label thì đồng hồ chạy theo thời gian mình đặt đó thì làm thế nào bạn?

hero5559990
20-11-2013, 17:37
Bạn muốn đồng hồ nhảy theo từng phút, hay là từng giây? mình viết luôn cho, vài dòng code chứ nhiêu. Ví dụ: cứ 1 phút udpate 1 lần, hoặc cứ 1 giây update 1 lần. bạn muốn loại nào?