//Visual C#2019でアナログ時計の製作練習をしている初心者です
//下記のプログラムで分針、秒針は正常に動作するのですが短針(時間針)のみが正常に動かず、1時、
//3時等の「正時」のみ動きます
//どうしても原因が分からず、詳しい方の力をお借りしたいと思います。
//また、改善点が有りましたら具体的に教えてください。(timer1_Tick_1の中にあるInvalidate();
//の挿入位置が正しいか、これを使うことが妥当か?など)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Drawing.Drawing2D;
namespace clock_vc
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.DoubleBuffered = true;//秒針が動く時のチラツキを止める
}
//各種処理を関数側に渡す
private void Form1_Paint(object sender, PaintEventArgs e)
{
//円盤上に1~12の目盛り表示する
memori_hyoji(e);
//針を動かす
hari_move(e);
}
//年月日、時刻の表示処理(始まり)
private void timer1_Tick_1(object sender, EventArgs e)
{
Invalidate();//これがないと針が動かないのでここに入れてみたが挿入位置が正しいかどうか分からない)
}
//円盤上に1~12の目盛り表示する(始まり)
void memori_hyoji(PaintEventArgs e)
{
//円盤上に1~12の目盛り表示する(始まり)
Font myfont = new Font("MS P ゴシック", 12); // 文字盤1~12の数字の大きさを12として初期設定
SolidBrush mybrush1 = new SolidBrush(Color.Red);
double x3,y3;//文字表示位置の座標
int n;
const double pii = 3.1415926535;
for (n=1; n <= 12; n++)
{
x3 = 138 + 110 * Math.Sin((pii / 180) * n * 30); //文字盤1~12の数字のx座標、30°ピッチ
y3 = 165 - 110 * Math.Cos((pii / 180) * n * 30); //文字盤1~12の数字のy座標、30°ピッチ
e.Graphics.DrawString(n.ToString(), myfont, mybrush1, (int)x3, (int)y3); //文字盤1~12の数字の描画
}
}
//針を動かす(始まり)
void hari_move(PaintEventArgs e)
{
DateTime dt = DateTime.Now;
//時分秒の取り出しと針を動かす
double x4, y4;//秒 // 各座標を表す変数
double x5, y5;//分
double x6, y6;//時
int ss, mm, hh;//秒、分、時
const double pi = 3.1415926535;
//秒針(始まり) 円盤の中心を(145,175)とする
ss = dt.Second; // 秒を取り出す
x4 = 145 + 115 * Math.Sin((pi / 180) * (ss * 6)); //秒針先端のx座標・・・1secで6°進む
y4 = 175 - 115 * Math.Cos((pi / 180) * (ss * 6));///'秒針先端のy座標//160-115*
Pen mypen2 = new Pen(Color.Gray, 2);
e.Graphics.DrawLine(mypen2, 145, 175, (int)x4, (int)y4); // 秒針を表示し、動かす145,165
//秒針(終わり)
//長針(始まり)
mm = dt.Minute; //分を取り出す
x5 = 145 + 100 * Math.Sin((pi / 180) * ((mm * 6) + (ss * 6 / 60))); //長針先端のx座標・・・1minで6°進む
y5 = 175 - 100 * Math.Cos((pi / 180) * ((mm * 6) + (ss * 6 / 60)));//'長針先端のy座標
Pen mypen3 = new Pen(Color.Black, 8);
mypen3.EndCap = LineCap.Triangle; // 針先を三角形にする
e.Graphics.DrawLine(mypen3, 145, 175, (int)x5, (int)y5);//長針を動かす
//長針(終わり)
//短針(始まり)
hh=dt.Hour; //時を取り出す
x6 = 145 + 75 * Math.Sin((pi / 180) * ((hh * 30) + (mm * (30 / 60)) + ss * (30 / 3600)));// '短針先端のx座標・・・1hrで30°進む
y6 = 175 - 75 * Math.Cos((pi / 180) * ((hh * 30) + (mm * (30 / 60)) + ss * (30 / 3600)));// '短針先端のy座標
Pen mypen4 = new Pen(Color.Black, 12);
mypen4.EndCap = LineCap.Triangle; //針先を三角形にする
e.Graphics.DrawLine(mypen4, 145, 175, (int)x6, (int)y6);
//短針(終わり)
}
//針を動かす(終わり)
}
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
画像ファイルに座標が記録され...
-
グラフの交点の求め方(Excel)
-
マインクラフト(pc版)で座標...
-
3次元空間上の2つの座標から...
-
ダイアログ内コントロールの位...
-
直線上にある点の座標の求め方
-
【C#】アクションゲームの地...
-
エクセルで回転する座標の出し方
-
Excel VBA で自在に図形を変化...
-
座標
-
閉図形の座標の配列が右回りか...
-
VB6のPrinter.ScaleWidth に対...
-
回転する矩形同士の当たり判定...
-
C#でスクリーンセーバーを作る...
-
座標を結んだ線分の交差
-
VB6→VS2005アップグレード後
-
始点、終点の二つの座標と半径...
-
変数名のこだわりについて
-
オートシェイプ円弧の中心点、...
-
SetWindowOrgとSetViewportOrg...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
グラフの交点の求め方(Excel)
-
マインクラフト(pc版)で座標...
-
以下のプログラムは重心を求め...
-
ダイアログ内コントロールの位...
-
3次元空間上の2つの座標から...
-
エクセルである点からの距離で...
-
エクセルで回転する座標の出し方
-
シーケンサー(PLC?)で制...
-
C言語 配列で座標
-
始点、終点の二つの座標と半径...
-
閉図形の座標の配列が右回りか...
-
一番近い点を見つけたい。
-
ワード上Shapeの位置情報を統一...
-
最小二乗平面
-
多角形の内部かどうか判定する方法
-
タッチパッドのタッチ座標取得
-
Excel VBA で自在に図形を変化...
-
座標を持った平面範囲に座標を...
-
ピクチャボックスの座標取得
-
DirectInputでの現在のマウス座...
おすすめ情報