Hi, I've got a simple UserControl:
and a simple testing programm:Code:public class CtlStandardPlace : System.Windows.Forms.UserControl { private SimuObject m_place; public SimuObject Place { get { return m_place; } set { m_place = value; } } public CtlStandardPlace() { // // The InitializeComponent() call is required for Windows Forms designer support. // InitializeComponent(); /* m_place = new SimuStandardPlace(); m_place.X = 1; m_place.Y = 1; m_place.Dx = 10; m_place.Dy = 10; */ } public CtlStandardPlace(SimuObject place) { m_place = (SimuStandardPlace)place; } #region Windows Forms Designer generated code /// <summary> /// This method is required for Windows Forms designer support. /// Do not change the method contents inside the source code editor. The Forms designer might /// not /// private void InitializeComponent() { this.Name = "CtlStandardPlace"; this.Size = new System.Drawing.Size(10, 10); } #endregion protected override void OnPaintBackground(System.Windows.Forms.PaintEventArgs e) { base.OnPaintBackground(e); BrushFactory bf = new BrushFactory(); SolidBrush brush; if(m_place != null) { System.Drawing.Pen pen = new System.Drawing.Pen(System.Drawing.Color.Black); Rectangle rect = new Rectangle(m_place.X,m_place.Y,m_place.Dx,m_place.Dy); System.Diagnostics.Debug.WriteLine(rect.ToString()); e.Graphics.DrawRectangle(pen, rect); brush = bf.CreateBrush(m_place) as SolidBrush; System.Diagnostics.Debug.WriteLine(System.DateTime.Now.ToString() + brush.ToString() + brush.Color.ToString()); if(brush == null) return; e.Graphics.FillRectangle(brush, rect.Left+1,rect.Top+1,rect.Right-1,rect.Bottom-1); e.Graphics.DrawString(this.ToString(), this.Font, brush, rect.Width + 3, (rect.Height - this.Font.Height) / 2); } } protected override void OnPaint(System.Windows.Forms.PaintEventArgs e) { base.OnPaint(e); BrushFactory bf = new BrushFactory(); SolidBrush brush; if(m_place != null) { System.Drawing.Pen pen = new System.Drawing.Pen(System.Drawing.Color.Black); Rectangle rect = new Rectangle(m_place.X,m_place.Y,m_place.Dx,m_place.Dy); System.Diagnostics.Debug.WriteLine(rect.ToString()); e.Graphics.DrawRectangle(pen, rect); brush = bf.CreateBrush(m_place) as SolidBrush; System.Diagnostics.Debug.WriteLine(System.DateTime.Now.ToString() + brush.ToString() + brush.Color.ToString()); if(brush == null) return; e.Graphics.FillRectangle(brush, rect.Left+1,rect.Top+1,rect.Right-1,rect.Bottom-1); } } }
If i run that programm the first dummy-place is shown but the second is missing. It seems that I made something wrong, but I have no idea what it could be.Code:public MainForm() { // // The InitializeComponent() call is required for Windows Forms designer support. // InitializeComponent(); // // TODO: Add constructor code after the InitializeComponent() call. // SimuEntryPlace dummy1 = new SimuEntryPlace(); dummy1.X = 1; dummy1.Y = 1; dummy1.Dx = 10; dummy1.Dy = 10; SimuBuilderControls.CtlStandardPlace place; place = new SimuBuilderControls.CtlStandardPlace(); place.Place = dummy1; this.Controls.Add(place); SimuStandardPlace dummy2 = new SimuStandardPlace(); dummy2.X = 11; dummy2.Y = 1; dummy2.Dx = 10; dummy2.Dy = 10; place = new SimuBuilderControls.CtlStandardPlace(); place.Place = dummy2; this.Controls.Add(place); this.Invalidate(); }
Anyone here got an idea?
Thanks
Akademos




Reply With Quote