2013-05-16 49 views
0

所以我試圖做出一個很好的圓形開關,當點擊時它會左右滑動以基本打開或關閉某些東西(可用於其他事情)。我有一個矩形版本工作有點好(我有一些調整記住,我想爲它),但我遇到的問題是通過使用圓角矩形。我做了幾個班來幫助我的自我。我有一個叫RoundRectanglePath。使用Create方法,我給它一個Rectangle(或者x,y,w,h)和一個半徑,然後它返回一個封閉的GraphicsPath,然後我可以使用Graphics。[Fill | Draw] Path with。然後我有一個RoundRectangle類,它只是一個與標籤非常相似的控件。我發現,如果我重寫OnPaintBackground並且不將事件發送到底座,而是繪製與Parent.BackColor相同的顏色的矩形,而不是讓我感覺控件真的是圓的。 (作爲一個相關的附註,我允許透明)Windows窗體自定義控件沒有正確繪畫

對於我的RoundMovableSwitch類,我使用2個RoundRectanglePaths將控件分成兩半。左邊是一個綠色的顏色,右邊是粉紅色(想想現在我可以用一個水平的LinearGradient畫筆......哦,哦)然後我在相對的兩側畫出弦和絃。爲了控制我添加一個RoundRectangle。當用戶單擊RoundRectangle或MoveableSwitch時,控件會一次向左或向右移動1個像素的RoundRectangle。該運動效果很好。我遇到的問題是這個。 RoundRectangle的外部邊緣是正確的透明顏色。內邊緣是錯誤的顏色。請參閱下圖中的RoundMovingSwitch 1和2。一旦我的代碼正常工作,我將返回並重新組織代碼。

Example of problem

的代碼託管在GitHub上:Here

回答

2

「我遇到的問題是這樣的RoundRectangle的外邊緣是正確的透明色的內邊緣是錯誤的顏色。 「

不知道我理解這個問題......

你試圖擺脫藍色邊角是圓滑邊緣外的?

如果是的話,那就試試這個在RoundRectangle: enter image description here

public RoundRectangle() 
    { 
     this.ResizeRedraw = true; 
     this.VisibleChanged += new EventHandler(RoundRectangle_VisibleChanged); 
    } 

    private bool RegionSet = false; 
    void RoundRectangle_VisibleChanged(object sender, EventArgs e) 
    { 
     if (this.Visible && !RegionSet) 
     { 
      RegionSet = true; 
      var r = new RectangleEx(this.ClientRectangle); 
      var path = RoundRectanglePath.Create(r.ToRectangle(), this.Radius, this.Corners); 
      this.Region = new Region(path); 
     } 
    } 

*如果控制的大小而變化,那麼你應該在地區()屬性重置爲新的大小。

編輯:爲了使復位區時,尺寸的變化:

protected override void OnSizeChanged(EventArgs e) 
    { 
     base.OnSizeChanged(e); 
     var r = new RectangleEx(this.ClientRectangle); 
     var path = RoundRectanglePath.Create(r.ToRectangle(), this.Radius, this.Corners); 
     this.Region = new Region(path); 
    } 
+0

你展示的圖片是什麼,我想要的目的。這個問題似乎並不是在RoundRectangle大小發生變化時......但我會嘗試任何東西:) –

+0

你已經做到了!!!!謝謝你,謝謝你,謝謝你 –

相關問題