Csharp/C Sharp/GUI Windows Form/Control — различия между версиями
Admin (обсуждение | вклад) м (1 версия) |
|
(нет различий)
|
Версия 18:31, 26 мая 2010
Содержание
Add a Control Programmatically
<source lang="csharp"> 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()); }
}
</source>
Change Image alignment inside a Control
<source lang="csharp">
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()); } } </source>
Control Enabled
<source lang="csharp"> 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()); }
}
</source>
Control renderer Demo: CheckBox
<source lang="csharp"> 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()); }
}
</source>
Control style: resize and redraw
<source lang="csharp">
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?"); } }
</source>
Get all controls on a form window
<source lang="csharp">
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; } }
</source>
Use Control.GetType to check the control type
<source lang="csharp">
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;
}
</source>