Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsFree MagazinesWhite PapersSubmit Content
Discussion GroupsASP.NETWindows FormsLanguages.NET FrameworkVisual Studio.NET
Articles.NET FrameworkASP.NETToolsWindows Forms
.NET DirectoryOpen Source ProjectsUser GroupsWeb Resources
Related Topics
Visual Basic 6SQL ServerMS AccessOther DB ProductsMS Server ProductsMore Topics ...

.NET Forum / Windows Forms / WinForm General / December 2004

Tip: Looking for answers? Try searching our database.

slow form drawing

Thread view: 
Enable EMail Alerts  Start New Thread
Thread rating: 
Konrad - 10 Dec 2004 13:25 GMT
Hi

I have form with three radio buttons and
five textboxes. If you look how the form will be displayed you can see that
first of all  the form will be drawn, and at all  locations where the
controls will be displayed,  a rectangle with the (dark  gray) background
color of the MDI form  is shown through. After this the controls are drawn.
Ok, this goes fast but
nevertheless you see these dark gray rectangles for
a short time and this looks very unprofessionel..
How to speed up displaying controls on a form?

Thanks
Konrad
Mike in Paradise - 11 Dec 2004 06:49 GMT
In your constructor you can use the SetStyle to Set up Double buffering...

this.SetStyle( ControlStyles.AllPaintingInWmPaint
    | ControlStyles.ResizeRedraw
    | ControlStyles.DoubleBuffer
    | ControlStyles.UserPaint
    ,true);

> Hi
>
[quoted text clipped - 10 lines]
> Thanks
> Konrad
Konrad - 11 Dec 2004 09:24 GMT
It doesn't help at all.

Regards

> In your constructor you can use the SetStyle to Set up Double buffering...
>
[quoted text clipped - 18 lines]
> > Thanks
> > Konrad
Mike in Paradise - 11 Dec 2004 18:17 GMT
I think what you are seeing is the MdiiClient area background on loading the
form.
Load the two forms below that set the MdiClient background to
ControlLightLight and see if  this is what you are looking for..

//************  MDI FORM ********************
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

namespace MjbMdiDoubleBuffer
{
/// <summary>
/// Summary description for Form1.
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
private System.Windows.Forms.MainMenu mainMenu1;
private System.Windows.Forms.MenuItem menuItem1;
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.Container components = null;

public Form1()
{
    //
    // Required for Windows Form Designer support
    //
    InitializeComponent();

    this.SetStyle( ControlStyles.AllPaintingInWmPaint
        | ControlStyles.ResizeRedraw
        | ControlStyles.DoubleBuffer
        | ControlStyles.UserPaint
        ,true);
}
[DefaultValue(false)]
public new bool IsMdiContainer
{
    get{ return base.IsMdiContainer; }
    set
    {
        base.IsMdiContainer = value;

        if( ! value) return;

        for(int i = 0; i < this.Controls.Count; i++)
        {
            MdiClient mdiClient = this.Controls[i] as MdiClient;
            if(mdiClient != null)
            {
                ControlStyles styles = ControlStyles.DoubleBuffer;

                try
                {
                    // Prevent flickering, only if our assembly
                    // has reflection permission.
                    Type mdiType = typeof(MdiClient);

                    System.Reflection.BindingFlags flags =
                        System.Reflection.BindingFlags.NonPublic |
                        System.Reflection.BindingFlags.Instance;

                    System.Reflection.MethodInfo method
                        = mdiType.GetMethod("SetStyle",flags);
                    object[] param   = {styles, true};
                    method.Invoke(mdiClient,param);
                }
                catch ( System.Security.SecurityException)
                {
                    /*Don't do anything!!! This code is running under
                                            partially trusted context*/
                }
                mdiClient.Paint +=new PaintEventHandler(this.MdiClient_Paint);
                mdiClient.Resize +=new EventHandler(MdiClient_Resize);
                break;
            }
        }                                              
    }
}
/// <summary>
/// Clean up any resources being used.
/// </summary>
protected override void Dispose( bool disposing )
{
    if( disposing )
    {
        if (components != null)
        {
            components.Dispose();
        }
    }
    base.Dispose( disposing );
}

#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
    this.mainMenu1 = new System.Windows.Forms.MainMenu();
    this.menuItem1 = new System.Windows.Forms.MenuItem();
    //
    // mainMenu1
    //
    this.mainMenu1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
                                                                                this.menuItem1});
    //
    // menuItem1
    //
    this.menuItem1.Index = 0;
    this.menuItem1.Text = "Add Child";
    this.menuItem1.Click += new System.EventHandler(this.menuItem1_Click);
    //
    // Form1
    //
    this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
    this.ClientSize = new System.Drawing.Size(292, 266);
    this.IsMdiContainer = true;
    this.Menu = this.mainMenu1;
    this.Name = "Form1";
    this.Text = "Form1";

}
#endregion

/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
    Application.Run(new Form1());
}

private void menuItem1_Click(object sender, System.EventArgs e)
{
    Form2 form = new Form2();
    form.MdiParent = this;
    form.Show();
}
private void MdiClient_Resize(object sender, EventArgs e)
{
    ((MdiClient)sender).Invalidate();
}
private void MdiClient_Paint(object sender, PaintEventArgs e)
{
    MdiClient mdiClient = ((MdiClient)sender);
    Brush brush = new SolidBrush(SystemColors.ControlLightLight);
    e.Graphics.Clip =  new Region(mdiClient.ClientRectangle);
    e.Graphics.FillRectangle(brush,mdiClient.ClientRectangle);
    brush.Dispose();
}
}
}

//*********************** MdiChild Form  ****************
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;

namespace MjbMdiDoubleBuffer
{
/// <summary>
/// Summary description for Form2.
/// </summary>
public class Form2 : System.Windows.Forms.Form
{
private System.Windows.Forms.RadioButton radioButton1;
private System.Windows.Forms.RadioButton radioButton2;
private System.Windows.Forms.RadioButton radioButton3;
private System.Windows.Forms.TextBox textBox1;
private System.Windows.Forms.TextBox textBox2;
private System.Windows.Forms.TextBox textBox3;
private System.Windows.Forms.TextBox textBox4;
private System.Windows.Forms.TextBox textBox5;
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.Container components = null;

public Form2()
{
    //
    // Required for Windows Form Designer support
    //
    InitializeComponent();

    this.SetStyle( ControlStyles.AllPaintingInWmPaint
        | ControlStyles.ResizeRedraw
        | ControlStyles.DoubleBuffer
        | ControlStyles.UserPaint
        ,true);
}

/// <summary>
/// Clean up any resources being used.
/// </summary>
protected override void Dispose( bool disposing )
{
    if( disposing )
    {
        if(components != null)
        {
            components.Dispose();
        }
    }
    base.Dispose( disposing );
}

#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
    this.radioButton1 = new System.Windows.Forms.RadioButton();
    this.radioButton2 = new System.Windows.Forms.RadioButton();
    this.radioButton3 = new System.Windows.Forms.RadioButton();
    this.textBox1 = new System.Windows.Forms.TextBox();
    this.textBox2 = new System.Windows.Forms.TextBox();
    this.textBox3 = new System.Windows.Forms.TextBox();
    this.textBox4 = new System.Windows.Forms.TextBox();
    this.textBox5 = new System.Windows.Forms.TextBox();
    this.SuspendLayout();
    //
    // radioButton1
    //
    this.radioButton1.Location = new System.Drawing.Point(16, 16);
    this.radioButton1.Name = "radioButton1";
    this.radioButton1.TabIndex = 0;
    this.radioButton1.Text = "radioButton1";
    //
    // radioButton2
    //
    this.radioButton2.Location = new System.Drawing.Point(16, 40);
    this.radioButton2.Name = "radioButton2";
    this.radioButton2.TabIndex = 1;
    this.radioButton2.Text = "radioButton2";
    //
    // radioButton3
    //
    this.radioButton3.Location = new System.Drawing.Point(16, 72);
    this.radioButton3.Name = "radioButton3";
    this.radioButton3.TabIndex = 2;
    this.radioButton3.Text = "radioButton3";
    //
    // textBox1
    //
    this.textBox1.Location = new System.Drawing.Point(120, 24);
    this.textBox1.Name = "textBox1";
    this.textBox1.Size = new System.Drawing.Size(144, 20);
    this.textBox1.TabIndex = 3;
    this.textBox1.Text = "textBox1";
    //
    // textBox2
    //
    this.textBox2.Location = new System.Drawing.Point(120, 56);
    this.textBox2.Name = "textBox2";
    this.textBox2.Size = new System.Drawing.Size(144, 20);
    this.textBox2.TabIndex = 4;
    this.textBox2.Text = "textBox2";
    //
    // textBox3
    //
    this.textBox3.Location = new System.Drawing.Point(120, 88);
    this.textBox3.Name = "textBox3";
    this.textBox3.Size = new System.Drawing.Size(144, 20);
    this.textBox3.TabIndex = 5;
    this.textBox3.Text = "textBox3";
    //
    // textBox4
    //
    this.textBox4.Location = new System.Drawing.Point(120, 120);
    this.textBox4.Name = "textBox4";
    this.textBox4.Size = new System.Drawing.Size(144, 20);
    this.textBox4.TabIndex = 6;
    this.textBox4.Text = "textBox4";
    //
    // textBox5
    //
    this.textBox5.Location = new System.Drawing.Point(120, 152);
    this.textBox5.Name = "textBox5";
    this.textBox5.Size = new System.Drawing.Size(144, 20);
    this.textBox5.TabIndex = 7;
    this.textBox5.Text = "textBox5";
    //
    // Form2
    //
    this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
    this.ClientSize = new System.Drawing.Size(292, 266);
    this.Controls.Add(this.textBox5);
    this.Controls.Add(this.textBox4);
    this.Controls.Add(this.textBox3);
    this.Controls.Add(this.textBox2);
    this.Controls.Add(this.textBox1);
    this.Controls.Add(this.radioButton3);
    this.Controls.Add(this.radioButton2);
    this.Controls.Add(this.radioButton1);
    this.Name = "Form2";
    this.Text = "Form2";
    this.ResumeLayout(false);

}
#endregion
bool firstPaint = true;
protected override void OnPaint(PaintEventArgs e)
{
    if (firstPaint)
    {
        e.Graphics.Clip =  new Region(this.Bounds);
        e.Graphics.Clear(SystemColors.Control);
        firstPaint = false;
    }
    base.OnPaint (e);
}

}
}

Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.