Time of Update: 2018-12-04
你的任務就是給ToolStrip中的startSimulation和reset按鈕編寫事件處理方法。下面是每個按鈕需要做的事情:1.最開始,第一個按鈕應該寫有“Start Simulation”,點擊它會使得模擬器啟動,並且其上的文本改變為“Pause Simulation”。如果模擬器暫停了,按鈕上的文字應該改變為“Resume Simulation”。2.第二個按鈕應該寫有“Reset”。點擊它的時候,世界應該被重建。如果Timer被暫停了,第一個按鈕的文本應該從“Resume Simula
Time of Update: 2018-12-04
試運行你已經做了很多工作了。編譯你的代碼,修正所有打字錯誤,然後運行模擬器。看起來怎麼樣? 現在是你把所學的知識付諸實踐的時候了。我們需要讓蜜蜂告訴模擬器他們在做什麼。這時,我們要讓模擬器的狀態列的資訊更新。這次,你不僅要負責編寫代碼,還要負責決定寫什麼代碼。你如何才可以讓模擬器中的某個方法在每次蜜蜂的狀態更新的時候得以調用呢?給你一點協助,我們已經寫出了要添加到表單中去的方法。Bee類可以在每次自身的狀態改變的時候調用它:
Time of Update: 2018-12-04
我們來直接跳到代碼。首先,我們需要一個Flower類。Flower類需要一個由Point定義的位置,有年齡,還有壽命。隨著時間的流逝,鮮花會變老。然後,當年齡到達了壽命值的時候,花朵會死去。你的任務就是把這些實現出來。①寫出Flower類的架構代碼下面是Flower類的類圖。寫出基本的類架構,Location,Age,Alive,Nectar和NectarHarvested都是自動屬性。NectarHarvested是可寫的,其他四個都是唯讀。現在把方法留空;我們稍後會回來處理它們。 ②給類
Time of Update: 2018-12-04
真正的代碼是一點一點寫出來的如果可以一次性寫完一個類的代碼,編譯,測試,然後把它放到一邊,再來寫另一個類的話自然是很好的。不幸的是,這是不可能的。通常,你會像我們這一章一樣寫代碼:一點一點的。我們可以建立差不多整個的Flower類,但是到了Bee類的時候,我們就還有一些工作要做(多數就是告訴蜜蜂在每一種狀態之下做什麼)。現在,對於Hive來說,我們需要填充很多空方法。還有,我們還沒有把Bee和Hive聯絡起來。還有一個麻煩問題就是如何成千次的調用Go()方法。 首先設計,然後
Time of Update: 2018-12-04
我們已經有了四個核心類,我們需要做一些工作來把它們聯絡起來。遵循下面的步驟來做。但是要知道:在完成之前你必須修改幾乎每一個類的某些地方。①修改Bee來接受Hive和World的引用。現在有了Hive和World類,Bee對象需要知道它們。更新你的代碼來讓Bee在其構造方法中接受Hive和World的引用並且儲存這些引用來在稍後使用。②更新Hive來讓它接受一個World的引用就像Bee需要知道Hive一樣,Hive也需要知道World。更新Hive來讓它在構造方法中接受一個World的引用。你還
Time of Update: 2018-12-04
一個類拋出異常,另一個類捕獲你在建立類的時候並不知道它會怎麼樣的被使用。有時候其他人會以一種導致問題的方式來使用你的類--有時候你自己也會這麼做!這時就用到異常了。拋出異常的目的就是要去發現有什麼問題,以便做一些計劃。一般你不會看到一個方法自己拋出異常並捕獲它。通常是一個方法拋出異常然後另一個方法捕獲--這個方法又通常是另一個對象中的。不要如下這樣做...沒有好的異常處理,一個異常會把整個程式都拖垮。下面是一個沒有異常處理的例子: ...要如下這樣做BeeProfile對象可以截獲異常並寫一條
Time of Update: 2018-12-04
即使是不縮放,把映像繪製到表單上也需要時間。假設你已經把所有的圖片都縮放過了。要把那些蜜蜂,花朵和蜂巢繪製出來還是需要時間。我們現在是使用Graphics把映像繪製到表單上去。如果你的眼睛捕捉到一次渲染的尾部,你會認為它是一次閃動。由於需要繪製的圖形很多,所以很有可能會出現閃爍。這就是多數業餘電腦遊戲的毛病...人眼捕捉到渲染的尾部,把它當做一次閃爍。
Time of Update: 2018-12-04
雙緩衝是內建於表單和控制項中的你可以使用Bitmap來做雙緩衝,但是C#和.NET通過內建的支援使得這一點更簡單。只需要把DoubleBuffered屬性設定為true。回到Zoomer使用者控制項--把它的DoubleBuffered設定為true,它就會停止閃爍了。現在回到BeeControl也這樣處理。這樣不可以解決所有的圖形問題--但是會有所改善。徹底檢修蜂巢模擬器如下做:①從移除BeeControl使用者控制項開始在蜂巢和闐園中不再會有任何的控制項。沒有BeeControl,沒有Pi
Time of Update: 2018-12-04
在表單上繪製一張圖片我們來建立一個表單應用,當你點擊表單的時候,表單上會繪製出一張圖片。如下做:①從給表單添加Click事件處理方法開始事件處理方法從一個using語句開始。你使用GDI+的時候,會用到很多實現了IDisposable介面的對象。如果你不處理這些對象,它們會耗費你的電腦資源,直到你關閉程式為止。所以你需要很多using語句: ②注意在表單上繪製的順序我們需要天藍色的背景,所以首先繪製一個藍色矩形,後面的圖形都要繪製在其上。你需要用到表單的ClientRectangle屬性,它指
Time of Update: 2018-12-04
使用Bitmap對象和DrawImage()方法,以及表單和使用者控制項的知識來建立一個使用TrackBar來縮放圖片的使用者控制項。①向一個新使用者控制項上添加兩個TrackBar控制項建立一個新的表單應用。添加一個使用者控制項--命名為Zoomer--設定其Size為(300,300)。拖拽兩個TrackBar到上面去。trackBar1拖到底部。trackBar2拖到右側,並設定其Orientation為Horizontal。兩個TrackBar的Minimum都設定為1,Maximum設
Time of Update: 2018-12-04
③為雙緩衝的動畫設定好蜂巢和闐園表單移除表單構造方法中設定背景映像的代碼。移除所有表單上的控制項並把表單的DoubleBuffered屬性設定為true。給兩個表單添加Paint事件處理方法。下面是蜂巢表單的Paint事件的處理方法--田園表單的差不多,只是它調用PaintField()方法而已: ④兩個表單都需要一個公有的renderer屬性:移除所有的對於渲染器的Reset()方法的調用,把所有的new Renderer()語句替換為對下面的CreateRenderer()方法的調用: ⑤
Time of Update: 2018-12-04
使用UseControl是一種建立控制項的好方式有一種建立控制項的簡單方法,使用IDE向項目中添加一個UserControl。UserControl的使用就和表單很類似,你可以把工具箱中的控制項拖拽上去,也可以使用IDE的表單設計器。也可以像使用表單一樣的使用其中的事件。我們來用UserControl重建BeeControl吧。如下做:①在IDE中右擊BeeControl.cs並把它重新命名為OldBeeControl.cs。②右擊項目添加一個UserControl,IDE將會在一個表單設計器
Time of Update: 2018-12-04
BeeControl也需要釋放本身包含的控制項Control類實現了IDisposable介面,所以你需要確保每個使用過的控制項都得以釋放掉。BeeControl內部含有一個Timer控制項,而它沒有得以釋放掉,這是個問題。不過很幸運,這個問題很容易修複--覆寫Dispose()方法即可。③覆寫Dispose()方法來釋放TimerBeeControl繼承自Control,所以它必然含有Dispose()方法。所以我們可以覆寫該方法來釋放Timer。進入代碼鍵入override: 在智能感應視
Time of Update: 2018-12-04
④蜜蜂和花朵已經知道自己的位置了我們用Point儲存蜜蜂和花朵的位置是有原因的,這樣我們可以根據Bee對象的位置來設定它對應的BeeControl的位置: ⑤如果某隻蜜蜂沒有對應的控制項,渲染器會去把它添加到蜂巢表單中去渲染器類可以很簡單那的通過字典的ContainsKey()方法來查詢出一個Bee對象是否有一個對應的Beecontrol。如果沒有渲染器會建立一個BeeControl,把它添加入字典並添加到表單中去。(它還會調用控制項的BringToFront()方法,以免蜜蜂會被花朵的Pic
Time of Update: 2018-12-04
需要改進圖形效能的方法就是給渲染器添加一個方法來縮放圖片。然後我們就可以在每張圖片載入之後縮放它,而且只在BeeControl中和蜂巢表單中使用縮放過之後的版本。如下做:①給渲染器添加一個ResizeImage方法所有儲存在項目中的圖片都是以Bitmap對象的形式存在的。下面是一個縮放圖片的靜態方法--把它添加到Renderer類中: ②給BeeControl添加這個ResizeCells方法你的BeeControl可以儲存自己的Bitmap對象--在一個數組中。下面可以產生這個數組,把每一個
Time of Update: 2018-12-04
使用System.Drawing來自己處理圖形Graphics屬於System.Drawing命名空間。.NET架構中有很多比工具箱中的PictureBox更強大的工具。你可以繪製圖形,使用字型,進行複雜的圖形計算...這些都從Graphics對象開始。你想要添加或者修改任何東西的圖形或者映像的時候,你都需要建立一個與該對象相關的Graphics對象,然後使用Graphics對象的方法來在目標上繪製。①從一個你想要繪製的對象開始以一個表單為例。調用表單的CreateGraphics()方法將會
Time of Update: 2018-12-04
在開始構建程式之前瞭解使用者的需求在開始寫這個通訊錄的程式--或者是任何的程式--之前我們要花點時間去想想誰會去用這個程式,他們需要這個程式做什嗎?1.CEO需要在工作的時候用這個通訊錄程式,在他的膝上型電腦上也需要用。他需要一個安裝包來確保把所有的檔案都正確的安裝到這兩台電腦上。 2.Objectville Paper公司的銷售團隊也想要用CEO的通訊錄。他們需要CEO的資料來建立一個郵件清單,來獲得使用者、獲得更多的銷售額。CEO感覺到使用資料庫是讓全公司的人都可以看到他的資料的最佳途徑,然
Time of Update: 2018-12-04
探討C#中的實體驗證(Entity Validation)環境:Windows 2008, VS 2008 SP1, Asp.Net Mvc 1.0一. 可能是最原始的驗證代碼為了讓問題盡量簡單,我們就拿一個簡單得不能再簡單的User類開刀吧。現在我們要在User類裡面加一個方法用於驗證User執行個體的合法性,相信很多人寫過如下類似的代碼:Check()方法很單純的為User類的屬性應用各種規則,然後返回非法的提示資訊集。驗證的時候只是簡單的調用一下實體的Check()方法即可:好吧,我承認,
Time of Update: 2018-12-04
C#語言自C/C++演變而來。它是現代、簡單、完全物件導向和型別安全的。C#語言是微軟公司針對.Net平台才推出來的一門新語言,作為.Net平台的第一語言,它幾乎集中了所有關於軟體開發和軟體工程研究的最新成果。物件導向、型別安全、組件技術、自動記憶體管理、跨平台異常處理、版本控制、代碼安全管理…… 在.NET應用程式開發中,不管是WEB Forms(ASP.NET)還是Windows Forms,都涉及到大量對象的事件響應及處理,比如客戶線上提交一份訂單、或是在Windows視窗上移動滑鼠等
Time of Update: 2018-12-04
C#語言參考目錄1. 介紹 11.1 Hello, world 11.2 類型 21.2.1 預定義類型 31.2.2 轉換 51.2.3 數群組類型 61.2.4 類型系統一致 71.3 變數和參數 81.4 自動記憶體管理 111.5 運算式 131.6 聲明 141.7 類 171.7.1 常數 191.7.2 域 191.7.3 方法 201.7.4 屬性 211.7.5 事件 221.