Csharp/C Sharp/GUI Windows Form/Control

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

Add a Control Programmatically

using System;
using System.Windows.Forms;
public class DynamicCheckBox : System.Windows.Forms.Form {
    public DynamicCheckBox(){
    
        string[] foods = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L"};
        int topPosition = 10;
        foreach (string food in foods)
        {
            // Create a new check box.
            CheckBox checkBox = new CheckBox();
            checkBox.Left = 10;
            checkBox.Top = topPosition;
            topPosition += 30;
            checkBox.Text = food;
            // Add the check box to the form.
            this.Controls.Add(checkBox);
        }
    }
    public static void Main(){
       Application.Run(new DynamicCheckBox());
    }
}


Change Image alignment inside a Control

    using System;
  using System.Drawing;
  using System.Collections;
  using System.ruponentModel;
  using System.Windows.Forms;
  using System.Data;
  public class ButtonForm : System.Windows.Forms.Form
  {
    private System.Windows.Forms.Button btnImage;
    private System.Windows.Forms.Button btnStandard;
    // Hold the current text alignment
    ContentAlignment currAlignment = ContentAlignment.MiddleCenter;
    int currEnumPos = 0;
    
    public ButtonForm()
    {
      InitializeComponent();
      // Set btnStandard as default accept.
      this.AcceptButton = btnStandard;
      CenterToScreen();
    }
    private void InitializeComponent()
    {
      this.btnStandard = new System.Windows.Forms.Button();
      this.btnImage = new System.Windows.Forms.Button();
      this.SuspendLayout();
      // 
      // btnStandard
      // 
      this.btnStandard.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F);
      this.btnStandard.ForeColor = System.Drawing.SystemColors.ControlText;
      this.btnStandard.Location = new System.Drawing.Point(16, 80);
      this.btnStandard.Name = "btnStandard";
      this.btnStandard.Size = new System.Drawing.Size(312, 88);
      this.btnStandard.TabIndex = 2;
      this.btnStandard.Text = "Click to change the Image alignment";
      this.btnStandard.Click += new System.EventHandler(this.btnStandard_Click);
      // 
      // btnImage
      // 
      this.btnImage.Font = new System.Drawing.Font("Microsoft Sans Serif", 20F, System.Drawing.FontStyle.Bold);
      this.btnImage.Image = new Bitmap("winter.jpg");
      this.btnImage.Location = new System.Drawing.Point(16, 192);
      this.btnImage.Name = "btnImage";
      this.btnImage.Size = new System.Drawing.Size(312, 72);
      this.btnImage.TabIndex = 3;
      this.btnImage.Text = "Image Button";
      this.btnImage.TextAlign = System.Drawing.ContentAlignment.TopCenter;
      // 
      // ButtonForm
      // 
      this.AcceptButton = this.btnStandard;
      this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
      this.ClientSize = new System.Drawing.Size(340, 269);
      this.Controls.AddRange(new System.Windows.Forms.Control[] {this.btnImage,
                                     this.btnStandard,
                                    });
      this.ForeColor = System.Drawing.SystemColors.ActiveCaptionText;
      this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D;
      this.Name = "ButtonForm";
      this.Text = "Buttons";
      this.ResumeLayout(false);
    }
    
    protected void btnStandard_Click (object sender, System.EventArgs e)
    {      
      Array values = Enum.GetValues(currAlignment.GetType());
    
      currEnumPos++;
      if(currEnumPos >= values.Length)
        currEnumPos = 0;
      
      currAlignment = (ContentAlignment)ContentAlignment.Parse(currAlignment.GetType(), 
              values.GetValue(currEnumPos).ToString());
      btnImage.ImageAlign = currAlignment;
    }
    public static void Main(string[] args) 
    {
      Application.Run(new ButtonForm());
    }
  }


Control Enabled

 
using System;
using System.Drawing;
using System.Windows.Forms;
class MainWindow : Form {
    private TextBox firstNameBox = new TextBox();
    private Button btnShowControls = new Button();
    public MainWindow() {
        this.Text = "Simple Controls";
        this.Width = 300;
        this.Height = 200;
        CenterToScreen();
        firstNameBox.Text = "Hello";
        firstNameBox.Size = new Size(150, 50);
        firstNameBox.Location = new Point(10, 10);
        this.Controls.Add(firstNameBox);
        btnShowControls.Text = "Click Me";
        btnShowControls.Size = new Size(90, 30);
        btnShowControls.Location = new Point(10, 70);
        btnShowControls.BackColor = Color.DodgerBlue;
        btnShowControls.Click += new EventHandler(btnShowControls_Clicked);
        this.Controls.Add(btnShowControls);
    }
    private void btnShowControls_Clicked(object sender, EventArgs e) {
        string ctrlInfo = "";
        foreach (Control c in this.Controls) {
            ctrlInfo += string.Format("Control: {0}\n",c.ToString());
        }
        MessageBox.Show(ctrlInfo, "Controls on Form");
        DisableAllButtons();
    }
    private void DisableAllButtons() {
        foreach (Control c in this.Controls) {
            if (c is Button)
                ((Button)c).Enabled = false;
        }
    }
    public static void Main(string[] args) {
        Application.Run(new MainWindow());
    }
}


Control renderer Demo: CheckBox

using System;
using System.Collections.Generic;
using System.ruponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Windows.Forms.VisualStyles;
public class Form1 : Form
{
      public Form1() {
            InitializeComponent();
            
      }
    private void ControlRenderer_Paint(object sender, PaintEventArgs e)
    {
      
        CheckBoxRenderer.DrawCheckBox(e.Graphics, new Point(10,10),
          new Rectangle(10,10,110,15), "Style checkbox", Font,false, CheckBoxState.CheckedNormal);
      
    }
    private void InitializeComponent()
    {
      this.SuspendLayout();
      // 
      // ControlRenderer
      // 
      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
      this.ClientSize = new System.Drawing.Size(292, 266);
      this.Name = "ControlRenderer";
      this.Text = "ControlRenderer";
      this.Paint += new System.Windows.Forms.PaintEventHandler(this.ControlRenderer_Paint);
      this.ResumeLayout(false);
    }
      [STAThread]
      static void Main()
      {
        Application.EnableVisualStyles();
        Application.Run(new Form1());
      }
}


Control style: resize and redraw

  using System;
  using System.Drawing;
  using System.Collections;
  using System.ruponentModel;
  using System.Windows.Forms;
  using System.Data;
  public class Form1 : System.Windows.Forms.Form
  {
    private System.Windows.Forms.Button btnGetStyles;
    private System.ruponentModel.Container components;
    public Form1()
    {
      InitializeComponent();
      SetStyle(ControlStyles.ResizeRedraw, true);
    }
    protected override void Dispose( bool disposing )
    {
      if( disposing )
      {
        if (components != null) 
        {
          components.Dispose();
        }
      }
      base.Dispose( disposing );
    }
    private void InitializeComponent()
    {
      this.btnGetStyles = new System.Windows.Forms.Button();
      this.btnGetStyles.Location = new System.Drawing.Point(24, 64);
      this.btnGetStyles.Size = new System.Drawing.Size(160, 23);
      this.btnGetStyles.TabIndex = 0;
      this.btnGetStyles.Text = "Get Form Styles";
      this.btnGetStyles.Click += new System.EventHandler(this.btnGetStyles_Click);
      this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
      this.ClientSize = new System.Drawing.Size(211, 104);
      this.Controls.AddRange(new System.Windows.Forms.Control[] {this.btnGetStyles});
      this.Text = "A Form with Style!";
    }
    [STAThread]
    static void Main() 
    {
      Application.Run(new Form1());
    }
    private void btnGetStyles_Click(object sender, System.EventArgs e)
    {
      MessageBox.Show(GetStyle(ControlStyles.ResizeRedraw).ToString(), 
        "Do you have ResizeRedraw?");
    }
  }


Get all controls on a form window

    using System;  
  using System.Drawing;
  using System.Windows.Forms;
    class MyForm : Form
  {
    private TextBox firstNameBox = new TextBox(); 
    private Button btnShowControls = new Button();
    
    MyForm()
    {
      this.Text = "Controls in the raw";
      // Add a new text box.
      firstNameBox.Text = "Chucky";
      firstNameBox.Size = new Size(150, 50);
      firstNameBox.Location = new Point(10, 10);
      this.Controls.Add(firstNameBox);
      // Add a new button.
      btnShowControls.Text = "Examine Controls collection";
      btnShowControls.Size = new Size(90, 90);
      btnShowControls.Location = new Point(10, 70);
      btnShowControls.Click += 
        new EventHandler(btnShowControls_Clicked);
      this.Controls.Add(btnShowControls);
      CenterToScreen();
    }
    protected void btnShowControls_Clicked(object sender, EventArgs e)
    {
      Control.ControlCollection coll = this.Controls;
      foreach(Control c in coll) {
        if(c != null)
          Console.WriteLine(c.Text, "Index numb: " + coll.GetChildIndex(c, false));   
      }
    }
        public static int Main(string[] args)
        {
      Application.Run(new MyForm());
      return 0;
        }
    }


Use Control.GetType to check the control type

 

using System;
using System.Drawing;
using System.Windows.Forms;
   
class CustomCheckBox: Form
{
     public static void Main()
     {
          Application.Run(new CustomCheckBox());
     }
     public CustomCheckBox()
     {
          int      cyText = Font.Height;
          int      cxText = cyText / 2;
          FontStyle[] afs = { FontStyle.Bold,      FontStyle.Italic, 
                              FontStyle.Underline, FontStyle.Strikeout };
   
          Label label    = new Label();
          label.Parent   = this;
          label.Text     = "Sample Text";
   
          for (int i = 0; i < 4; i++)
          {
               FontStyleCheckBox chkbox = new FontStyleCheckBox();
               chkbox.Parent = this;
               chkbox.Text = afs[i].ToString();
               chkbox.fontstyle = afs[i];
               chkbox.Location = new Point(2 * cxText, 
                                               (4 + 3 * i) * cyText / 2);
               chkbox.Size = new Size(12 * cxText, cyText);
               chkbox.CheckedChanged += new EventHandler(CheckBoxOnCheckedChanged);
          }
     }
     void CheckBoxOnCheckedChanged(object obj, EventArgs ea)
     {
          FontStyle fs = 0;
          Label     label = null;
   
          for (int i = 0; i < Controls.Count; i++)
          {
               Control ctrl = Controls[i];
   
               if (ctrl.GetType() == typeof(Label))
                    label = (Label) ctrl;
               else if (ctrl.GetType() == typeof(FontStyleCheckBox))
                    if (((FontStyleCheckBox) ctrl).Checked)
                         fs |= ((FontStyleCheckBox) ctrl).fontstyle;
          }
          label.Font = new Font(label.Font, fs);
     }
}
class FontStyleCheckBox: CheckBox
{
     public FontStyle fontstyle;
}