2010-10-26 110 views
0

如何旋轉(90度)面板控件?我知道這是非常簡單的WPF,但我不能使用它。 你知道WinForm面板控制的這種方式嗎? 謝謝大家!在WinForm中旋轉面板

+0

只是出於好奇,爲什麼你不能使用WPF?你知道ElementHost,對嗎?我很感興趣,因爲我們正在考慮在我們的WinForms應用程序中添加一些WPF,並且我很好奇你爲什麼不能。 – 2010-10-26 22:39:05

回答

1

您將不得不重寫OnPaint,然後使用GDI手動繪製panel上的所有控件。我從來沒有做過旋轉,但我已經做了一些像下拉菜單的定製重繪。您需要爲面板上的每種控件類型編寫自定義OnPaints。

所以更多的這一點,因爲我只是嘗試了我的自我...我不認爲你可以自定義繪製大多數常用控件。 WPF是一種不同的動物,旨在支持這種類型的事情。當這些控件進行繪製時,它們會在封面下執行操作,並且沒有任何可以執行的操作。我能夠繪製和旋轉面板,但是我無法像複選框那樣執行其他控件。

public class RotatePanel : Panel, IRotate 
    { 

     public RotatePanel() : base() 
     { 
      Angle = 0; 
     } 


     protected override void OnPaint(PaintEventArgs e) 
     { 
      using (Graphics g = this.CreateGraphics()) 
      { 
       foreach (IRotate control in this.Controls) 
       { 
        control.Angle = Angle; 
       } 
       g.RotateTransform(Angle); 
       g.DrawRectangle(new System.Drawing.Pen(new SolidBrush(Color.Black), 2f), 4f, 4f, 10f, 10f); 
       g.DrawRectangle(new System.Drawing.Pen(new SolidBrush(Color.Azure), 2f), 14f, 14f, 30f, 30f); 
       g.Flush(); 
      } 
      base.OnPaint(e); 
     } 

     protected override void OnPaintBackground(PaintEventArgs e) 
     { 
      base.OnPaintBackground(e); 
     } 

     public float Angle 
     { 
      get; 
      set; 
     } 
    } 

    public interface IRotate 
    { 
     float Angle { get; set; } 
    } 

    public class RotateCheckBox : CheckBox, IRotate 
    { 
     public float Angle { get; set; } 
     public RotateCheckBox():base() 
     { 
      Angle = 0; 
     } 


     protected override void OnPaint(PaintEventArgs pevent) 
     { 
      pevent.Graphics.RotateTransform(this.Angle); 
      pevent.Graphics.Flush(); 
      base.OnPaint(pevent); 
     } 
    }