創作內容

14 GP

【C#】學習筆記 鬧鐘程式 準備篇 (滑鼠事件)

作者:落葉無聲│2012-01-04 15:50:19│巴幣:28│人氣:6503
C#學習筆記 鬧鐘程式 準備篇 (滑鼠事件)

剛完成關機程式後, 也曾想過寫鬧鐘程式, 或將鬧鐘的功能加入關機程式中, 但意願不高, 除了當時想研究資料庫外, 或許也因鬧鐘程式和關機程式有很多程式碼都滿雷同的關係.

但和巴友源千鶴聊過後
發現, 也許可以利用這個鬧鐘程式, 來開始寫第一個自製視窗的程式.

所謂的自製視窗,
Custom Windows, 就是將原來常見的Windows視窗, 變更為自己製作的視窗. 這樣說明可能有點難了解, 簡單的來說就如下面兩個程式圖片, 兩者都是鬧鐘程式, 圖一的執行介面為Windows視窗, 圖二就是剛剛提到的自製視窗的程式.

圖一 (Windows視窗)
"Google搜尋"


圖二(自製視窗)"Google搜尋"


一開始我其實完全沒有頭緒要如何自製使用者視窗, Google一段時間後, 找到了這篇文章Creating Custom Windows, 閱後獲益良多. 建議對自製視窗有興趣的同好, 入門前不知道怎麼開始的話, 可以照著說明做一次看看.

鬧鐘程式準備篇(滑鼠事件)
是落葉在開始寫鬧鐘程式之前找資料的筆記, 其中也包含測試的小程式(本篇的滑鼠事件).

還是一句老話, 説明極可能亂七八糟. . . 一個非寫程式出身的孩子留. . .



想像程式

網路上有很多Clock或者是Alarm的圖形可以參考, 落葉比較偏愛電子式的時鐘(如下圖). 會選擇這類型的, 因為這樣式對美工功力相當差的我, 做出來後的成品, 比較不會太難看. . .

(電子式時鐘)"Google搜尋"


時鐘的顯示
目前暫定為現在日期, 時間, AM和PM, 再加上顯示設定後的響鈴時間, 可能會和上圖有點像. 這個部份打算自己用PhotoShop來做, 盡可能不在網路上撿資源(拿人家的圖)為原則. 另外也希望能做到精緻, 實用不複雜的介面.


功能鍵
暫定為關閉程式, 設定時間, 自訂鬧鈴.

由於使用者在自製視窗的操作上, 很多都和滑鼠習習相關, 所以決定先學習如何控製滑鼠事件.

順便一提落葉手上唯一的一本工具書是當初要自學C#時購買的, 由博碩文化出品的Visual C# 2008從零開始.



滑鼠事件測試程式目的說明及程式碼



這個測試程式的主要目的, 是測試當滑鼠移動或點擊該圖形時, 該圖片產生變化. 程式中共有4個小測試 , 如下述. . .

Test 1目的

當滑鼠經過該圖形, 顏色變更為紅色.


Test 1程式碼

首先拖曳工具箱的元件ImageList到視窗裡頭.


在Form Load加入程式碼, 將兩圖檔加入到ImageList裡頭.

//如果該圖檔存在 binDebug資料來之內, 則不用指定路徑, 直接將檔名鍵入即可.
//圖檔一(藍球)將存在於imageList1.Images[0].


//藍球
imageList1.Images.Add(Image.FromFile("Circles_Small_Blue.gif"));
//紅球
imageList1.Images.Add(Image.FromFile("Circles_Small_Red.gif"));

接著拖曳工具箱的通用控制項PictureBox到視窗裡頭.


在Form Load加入程式碼, 設定PictureBox的顯示圖檔為圖檔一(藍球).

picSmall1.Image = imageList1.Images[0];

點擊新增的PictureBox一下, 並選擇其屬性 > 事件.


在事件裡頭有很多關於滑鼠的事件可供選擇, 這個測試程式中有使用的滑鼠事件如下述. . .

  • MouseEnter (當滑鼠進入)
  • MouseLeave (當滑鼠離開)
  • MouseMove (當滑鼠移動)
  • MouseDown (當滑鼠點擊不放)
  • MouseUp (當滑鼠放開)

在欄位點擊MouseEnter和MouseLeave 2下


//當滑鼠進入後, PictureBox的圖檔顯示ImageList.Images[1](紅球).
private voidpicSmall1_MouseEnter(object sender, EventArgs e)
        {
            picSmall1.Image =imageList1.Images[1];
        }

//當滑鼠離開後, PictureBox的圖檔顯示ImageList.Images[0](藍球).
private void  picSmall1_MouseLeave(object sender, EventArgs e)
        {
            picSmall1.Image =imageList1.Images[0];
        }



Test 2目的

像跑馬燈由左向右從藍球變成紅球, 這裡藍球變紅球的變化是使用Timer來計算每0.5秒變換一次.


Timer設定可以參考落葉的文章電腦定時關機程式 準備篇.

Test 2 程式碼(Timer)
//計算次數用
int count = 0;

private void timer1_Tick(object sender, EventArgs e)
        {
            count += 1;

            //int轉成string給switch
            string forCase;
            forCase = count.ToString();
            switch (forCase)
            {
                case "1":
                    //case 1時 第一個球變紅色上一個球變回藍色, case 2~6以此類推
                    picSmallFlash1.Image =imageList1.Images[1];
                    picSmallFlash6.Image =imageList1.Images[0];
                    break;
  •    
  • (省略)
                case "6":
                    picSmallFlash6.Image =imageList1.Images[1];
                    picSmallFlash5.Image = imageList1.Images[0];
                    
                    //跑完一輪後, 計數器歸0, 從case 1開始
                    count = 0;    
                    break;
            }
        }



Test 3目的

  • 當滑鼠進入時, 滑鼠(Cursor)變更為Hand.
  • 滑鼠移動時球放大.
  • 使用者可以自由移動藍球, 滑鼠離開時, 藍球停留原地.

Test 3 主要程式碼

  • 當滑鼠進入時, 滑鼠(Cursor)變更為Hand.

選擇該項PictureBox, 並在屬性Cursor選擇Hand.


如此一來, 當滑鼠經過時就會是Hand了, 也等同用圖像說明該圖可以被移動.


  • 移動時將球放大的圖像, 我並沒有另外畫一個較大的紅球或藍球而是利用SizeMode. 我原來的圖比PictureBox來的小一點, 所以我只要在MouseDown時利用Zoom放大圖像即可. SizeMode可以如下設定. . .

//MouseDown 放大
picSmallMovable.SizeMode = PictureBoxSizeMode.Zoom;

//MouseUp 復原
picSmallMovable.SizeMode = PictureBoxSizeMode.Normal;

  • 使用者移動藍球的做法我是參考工具書的寫法, 如下說明. . .

//dragging 是利用來決定滑鼠是否有拖曳的動作
bool dragging = false;

//記錄滑鼠拖曳前的座標
int x_down, y_down;
        
private voidpicSmallMovable_MouseDown(object sender, MouseEventArgs e)
        {
            //開始拖曳時設定true
           dragging = true;

           //記錄拖曳前座標
            x_down = e.X;
            y_down = e.Y;
        }
private voidpicSmallMovable_MouseMove(object sender, MouseEventArgs e)
        {
            //MouseMove時dragging = true來移動圖像
            if (dragging)
            {
                //現在圖像座標= 現在滑鼠現在位置減去原來位置
                picSmallMovable.Top += (e.Y -y_down);
                picSmallMovable.Left += (e.X -x_down);
            }
        }
private voidpicSmallMovable_MouseUp(object sender, MouseEventArgs e)
        {
            //滑鼠離開時dragging設定false
            dragging = false;
        }



Test 4目的

移動圖像到某特定位置後, 產生變化.

本例是當左邊的藍球移動到右邊藍球時會變大紅球.


接著原來左邊的球不見


Test 4 主要程式碼(MouseUp)
private voidpicInterfere1_MouseUp(object sender, MouseEventArgs e)
        {
            //判斷圖像座標使用
            bool x, y;
            dragging = false;
            //右邊藍球的位置範圍, 實際座標為230, 29, 捉一個範圍值+-6
            y = picInterfere1.Top < 35&& picInterfere1.Top > 23;
            x = picInterfere1.Left < 236&& picInterfere1.Left > 224;
            
            //如果滿足條件執行
            if (y && x)
            {
                //左邊藍球設定看不見
                picInterfere1.Visible = false;

                //右邊藍球變成紅色, 並變大.
                picInterfere2.Image =imageList1.Images[1];
                picInterfere2.SizeMode = PictureBoxSizeMode.StretchImage;
            }
            
            //如果不滿足條件執行
            else
            {
                //左邊藍球回到原位
                picInterfere1.Top = 29;
                picInterfere1.Left = 29;
            }



接下來的計劃. . .

  1. 畫Ditital Number (Visio & PhotoShop)
  2. 測試程式 計時器 (C#)
  3. 畫桌面小鬧鐘 (PhotoShop)
  4. 畫鬧鐘按鈕 (PhotoShop)
  5. 鬧鐘主程式 (C#)



後記

這次寫Test 4時遇到一個還滿重要的問題未解決, 就是當滑鼠點擊某圖像時, 如何讓該圖像的layer變成最上面那層?



小屋關於鬧鐘程式文章連結

引用網址:https://home.gamer.com.tw/TrackBack.php?sn=1501402
All rights reserved. 版權所有,保留一切權利

相關創作

同標籤作品搜尋:C#|程式|程式設計|鬧鐘程式|桌面鬧鐘|滑鼠|滑鼠控制|滑鼠事件

留言共 14 篇留言

嫣寶寶
YA 有提到我耶

可是可不可以繁體化!!!

01-04 16:02

落葉無聲
我的想法是全圖像化~ 例如 你看到鈴噹會想到 鈴聲~ 看到 音符會想到 是設定音樂~01-04 16:03
落葉無聲
但我的大問題是 我美工很差. . .會盡力. . . [e13]01-04 16:04
嫣寶寶
歐 也是可以啦 但是這時候圖案的關鍵就很重要了= =!!

01-04 16:04

落葉無聲
真的. . . 美工大考驗即將來臨. . .01-04 16:06
紅豬
水喔~不過電腦離床太遠~無法叫我起床[e13]

01-04 16:05

落葉無聲
床頭音響 拿來接電腦吧 呵呵01-04 16:07
嫣寶寶
美工我可以幫你歐!!!

01-04 16:08

落葉無聲
[e15] 真的嗎? 我會先將我想要的畫出來(用PhotoShop), @@ 到時候 如果方便 在麻煩妳幫忙了, 特別是配色及Style. . . ^0^ 01-04 16:20
落葉無聲
在一次感謝 ^0^01-04 16:20
嫣寶寶
我沒有STYLE 囧

01-04 16:27

落葉無聲
鬧鐘的繪製是計劃中的第4階段, 還要一段時間, 好了我會先PO上來小屋. 藉時能幫忙的,請不吝您的建議~ 因為我想 如果你要幫我畫, 可能也要先看看我的構思.01-04 16:39
真田性村
寫程式 有附寫註解~ 不錯~ XD

01-05 00:53

落葉無聲
//綠字嗎? 那是為了方便說明. . . 小屋文 我補上去的 XD01-05 10:41
Sea
挖!!要進軍自製視窗介面了@@!
看了大大的準備文之後害我的手也開始癢癢的XD

01-05 18:15

落葉無聲
呵呵! 一起努力!! 同好一起研究!!01-05 18:42
亦真非真
gj

01-08 21:00

落葉無聲
[e12]01-08 23:15
偉博斯特
已經進入我看不懂的區域了@@
但...你解釋的很清楚^^
落葉兄~加油^^

01-10 07:13

落葉無聲
加油!!! 哦 哦 哦!!! [e22] (努力中)01-10 10:54
菲斯特
[e21]我也看不太懂了~~~該反省了

01-15 18:43

落葉無聲
我在想, 可能和我的寫法有點關係, 程式很多地方, PO文時我都刪了QQ01-16 11:49
絢爛
落葉兄你好 小弟我現在在做專題,目前我需要的程式類似於text2的跑馬燈方式一樣
但我想利用button的方式,然後很多個button上面為ㄅㄆㄇㄈ以此類推
然後從左閃到右可以選擇這樣
這樣我該如何改落葉兄的程式謝謝您!!!

12-06 16:23

落葉無聲
你如果需要移動button的話, 也就是button像跑馬燈在跑的話, 我會建議你自己畫button, 然後在用圖型來做. 我還沒試過如果讓button像跑馬燈來跑, 但如果用圖型做, 感覺是容易多了.12-07 14:18

落葉兄你好 我是樓上的小弟 ,目前我已經製作好button了,且button上也打好各個ㄅㄆㄇㄈ以此類推
但是如果要照落葉兄的圖形方法的話,一樣也要加入imageList嗎?
因為我是使用button的方式 所以我不知道我該如何下手,拜託了落葉兄![e22]

12-11 18:19

落葉無聲
嗯 圖型的部份, 加入imagelist後 你可以隨時叫出來, 我覺得是要的. 其實我不太確定你Button是想做什麼樣的效果, 你程式照張相, 然後說明一下嗎?

最近比較少上巴哈, 可能沒辦法 馬上回覆, 請見諒.12-12 12:31

落葉兄你好 就假如 ㄅ ㄆ ㄇ ㄈ ㄉ ㄊ 這樣六個button
然後我想要的感覺就是說 從第一個button到最後一個button
每個大約是亮二到三秒,類似跑馬燈的樣子
因為我想要在亮的同時,可以做選擇的動作,不過現在可以用亮的方式就好了
還是說落葉哥有FB可以交流一下呢[e23]

12-14 01:12

落葉無聲
不好意思, 我最近比較沒空, 我有時間時, 我寫一下, 這個只要用Timer來寫就可以了.12-19 14:49

好 在此先謝謝落葉兄了[e19]

12-23 20:45

我要留言提醒:您尚未登入,請先登入再留言

14喜歡★rovingleaves 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:【C#】電腦定時關機程式... 後一篇:【軟體】電子數字繪製 前...

追蹤私訊切換新版閱覽

作品資料夾

flys8028大家
有點色色取向的部落格 https://www.rocksugarcat.com/看更多我要大聲說昨天15:38


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】