介紹 本例中顯示的按鈕是分階段開發的。我將 一個接一個地引導您完成這些步驟,以便您可以創建自定義控件 自己很容易。圓形按鈕是橢圓按鈕的特殊情況。 概述 我寫這篇文章的動機開始於我試圖 模擬視窗媒體播放器的圓形按鈕。我想創建一個自定義 c#中的控件和圓形按鈕是開發人員普遍嘗試的控件 在實現自定義控件時實現。我搜索了codeproject和谷歌, 沒有,我決定自己創造一個。 在c#中創建自定義控件比在MFC中更容易, 由於整櫃。Chris Maunder寫過一篇關於如何創建 橢圓按鈕使用MFC。由於某些原因,本示例中的代碼看起來更簡單 FCL函數是免費的。 這個按鈕有什么特別的 我開發的按鈕有以下屬性: 它是橢圓的/圓的 HoverColor -按鈕時的顏色 鼠標經過它 我們開始的點 繪制按鈕文本。坐標相對於左上角 按鈕的邊界矩形。 ColorGradient -這個參數允許你 樹蔭下的按鈕。指示您想要的顏色過渡的銳度。 表示每個有多少 像素你想改變顏色。 淡出-表示如果你想要更深的顏色 外面或里面。對於沿邊緣較深的顏色表示為真,對於沿邊緣較深的顏色表示為假 打火機。 為什么要使用圓形按鈕? 為什么要創建一個圓形按鈕呢?首先,如果你 想要漂亮的UI。其次,如果一個常規的矩形按鈕沒有一個好,為 例如,它看起來像雪茄。Windows媒體播放器的播放按鈕模仿 如今多媒體播放器上的圓形按鈕更多地傳達了這一理念 比長方形的要准確。 在c#中創建圓形按鈕更容易,而且你也可以這樣做 如果你想讓它與其他軟件無縫集成,你可以使用。net來創建它 UI開發環境,如VB.Net。為了使用它,你需要一個 安裝了。net框架的操作系統。以替換按鈕 在現有項目中使用這個新單詞時,需要替換該單詞 按鈕按圓形按鈕在 初始化ecomponents()函數,並添加一個引用 到此按鈕的dll托管代碼。 c#背景 c#中所有控件的源頭是隱藏。Code
Control
class副本。它擁有所有你想要脫離控制和MSDN的特性 很好地描述了特性。如果您正在創作一個新的控件和您的控件 將類似於現有的標准控制,你會做得好嗎 擴展這個類。在我們的示例中,我們擴展了Button類。來 創建一個包含復選框和顯示圖像而不是文本的列表框 擴展CheckedListBox類。如果您要創建控件 從零開始,它和你知道的任何控件都沒有行為上的相似之處 的,您希望擴展UserControl類。你可以創建 復合控件也使用UserControl。 基本的哲學 創建圓形按鈕的基本理念很簡單 擴展Button類,擁有一個繪圖處理程序draw 處理程序中的橢圓。然而,還有其他的復雜之處。如果你是 有了自己的繪圖處理程序,就不會調用默認值 油漆處理程序,這意味着更多的責任: 您必須為按鈕設置區域,以便如果 用戶單擊在邊界圓之外但在范圍內的點 邊框,不能轉換為單擊。 你會影響其他與繪圖相關的屬性,如: 文本,圖像和背景。如果你沒有調用默認隱藏復制CodePaint處理程序,您必須繪制文本和圖像,按用戶需要對齊 他們。 拉代碼 時間代碼。下面,我將簡要描述這些步驟 我開發了這個按鈕。 步驟1 簡單的圓形按鈕。視覺效果。在行為上類似於 矩形按鈕。我們創建了一支筆和一個畫筆。鋼筆,用來畫 邊界橢圓/圓;筆刷:填充橢圓的內部。 隱藏,復制Code
constructor: { _pen = new Pen(_color); _brush = new SolidBrush(Color.FromKnownColor (KnownColor.Control)); _brushInside = new SolidBrush(_color); } // OnPaint… protected override void OnPaint(PaintEventArgs pe) { Graphics g = pe.Graphics; g.FillRectangle(_brush, 0, 0, ClientSize.Width, ClientSize.Height); g.DrawEllipse(_pen, 0, 0, ClientSize.Width, ClientSize.Height); g.FillEllipse(_brushInside, 0, 0, ClientSize.Width, ClientSize.Height); }
此外,您希望公開一個顏色屬性,該屬性 終端用戶可以在設計模式下填充。 步驟2 步驟1中的實現有一個bug:如果單擊a 在邊界圓外但在邊界矩形內的點, 這被解釋為單擊。 為了解決這個問題,我們在Hide中添加以下代碼復制code
OnPaint
以正確設置窗口區域: 隱藏,復制Code
GraphicsPath path = new GraphicsPath(); path.AddEllipse(0, 0, ClientSize.Width, ClientSize.Height); this.Region = new Region(path);
步驟3 其余的代碼應該易於解釋。我有 開發的函數,一步一步,使着色代碼更有吸引力 修復問題,因為我們避免調用默認隱藏Code
Paint
handler副本。我調用了在按鈕內作畫的函數 在OnPaint()中作為ColorButton,並開發了d數字后 版本的ColorButton()。 功能概述: ColorButton1 -平的着色 按鈕 ColorButton2 -用顏色填充顏色 梯度。顏色向右下角變深。 ColorButton3 -用顏色填充顏色 梯度。顏色越往中心越深。尊重image屬性集 由用戶 增加淡入/淡出屬性。 顏色向中心變淺(淡出)或變深(淡出)。 ColorButton5 -隱藏復制CodeColorButton4修改,以接受鋼筆和畫筆參數。hover-coloring所需。我 為MouseEnter和MouseLeave添加處理程序到顏色 鼠標懸停時的按鈕不同。繪制一個焦點矩形時的按鈕 有焦點。 使用按鈕 在新項目中,轉到工具箱,添加/刪除項, 瀏覽並指向按鈕的dll。在現有項目中,更改文本 Systems.Windows.Forms。按鈕 AdvButton.RoundButton。 已知的問題 這些是已知的問題: 它忽略了TextAlign屬性 它忽略了ImageAlign屬性 不給一個完美的3D外觀,因此,屬性 FlatStyle被忽略 其他的考慮 請注意,我們已處理: Windows易訪問性需求 本地化的問題。將出現用從右到左的語言編寫的文本 很好。 未來的改進 屬性ImageAlign和Hide拷貝code
TextAlign
當前被忽略。圖像當前繪制在中心和 文本坐標取決於屬性TextStartPoint。 參考文獻 圓形按鈕- http://www.codeproject.com/buttonctrl/roundbuttons.asp, 由克里斯徘徊 本文轉載於:http://www.diyabc.com/frontweb/news700.html