DOBON.NET DOBON.NETプログラミング掲示板過去ログ

タイトルバーをクリックすると・・・

環境/言語:[C#]
分類:[.NET]


 はじめまして
よろしくおねがいします。

 いつも参考にさせていただいています。

 今回相談したいのは、
表示されたフォームのタイトルバーをつまむと
プログラムがとまってしまう仕組みについてです。

 using System;
using System.Drawing;
using System.Windows.Forms;

namespace test
{
class main:Form
{
public static void Main()
{

using (main a = new main())
{
a.Show();

int i = 0;
float old_time = Environment.TickCount;

Label counter = new Label();
counter.Parent = a;


while (true)
{

if (old_time + 1000 < Environment.TickCount)
{
i++;
old_time = Environment.TickCount;
}

counter.Text = i.ToString();

Application.DoEvents();

}
}
}

}
}
 こういうプログラムをつくりました。
1秒ずつ計って表示するものです。

 このフォームの上(タイトルバー)をつまむと
時間計測がとまるんです。

 どこへ動かしても立ち上げたときからの時間を表示したいのですが、
どういう仕組みなのか、どうやればいいのかぜんぜんわかりません。


 どなたかよろしくおねがいします。
そう言う定期的な動作は、ループで実現するのではなく Timer を使いましょう。
できました!

using System;
using System.Windows.Forms;

using System.Threading;


namespace test
{
class main : Form
{
static System.Windows.Forms.Timer time = new System.Windows.Forms.Timer();
static int i = 0;

static Label counter = new Label();

public static void Main()
{
counter.Text = i.ToString();

using (main a = new main())
{
time.Start();
time.Tick += new EventHandler(time_Tick);
time.Interval = 1000;

a.Show();
counter.Parent = a;

while (true)
{
if (a.Created)
Application.DoEvents();
}
}
}

static void time_Tick(object sender, EventArgs e)
{
i++;
counter.Text = i.ToString();

}
}
}


 勉強になりました!ありがとうございます!
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板