Csharp/C Sharp/GUI Windows Form/Dialog
Версия от 15:31, 26 мая 2010; (обсуждение)
Содержание
A dialog by user defined property
using System;
using System.Collections.Generic;
using System.ruponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
class MainClass {
public static void Main() {
Phone frm = new Phone();
while (true) {
frm.ShowDialog();
if (frm.DialogResult == DialogResult.OK) {
Console.WriteLine(frm.PhoneNumber);
if (frm.PhoneNumber.Length == 8 | frm.PhoneNumber.Length == 12) {
break;
} else {
MessageBox.Show("Phone number was not formatted correctly. Please correct entry.");
}
} else if (frm.DialogResult == DialogResult.Cancel) {
Console.WriteLine("Form was canceled.");
break;
}
}
frm.Close();
}
}
class Phone : Form {
private System.Windows.Forms.TextBox textBox1 = new System.Windows.Forms.TextBox();
private System.Windows.Forms.Label label1 = new System.Windows.Forms.Label() ;
private System.Windows.Forms.Button btnOK = new System.Windows.Forms.Button();
private System.Windows.Forms.Button btnCancel = new System.Windows.Forms.Button();
public Phone() {
this.SuspendLayout();
this.textBox1.Location = new System.Drawing.Point(122, 21);
this.textBox1.Margin = new System.Windows.Forms.Padding(1, 3, 3, 3);
this.textBox1.Size = new System.Drawing.Size(115, 20);
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(10, 26);
this.label1.Margin = new System.Windows.Forms.Padding(3, 3, 1, 3);
this.label1.Size = new System.Drawing.Size(110, 14);
this.label1.Text = "Enter phone number:";
this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
this.btnOK.DialogResult = System.Windows.Forms.DialogResult.OK;
this.btnOK.Location = new System.Drawing.Point(36, 65);
this.btnOK.Text = "OK";
this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.btnCancel.Location = new System.Drawing.Point(132, 65);
this.btnCancel.Text = "Cancel";
this.ClientSize = new System.Drawing.Size(270, 107);
this.Controls.Add(this.btnCancel);
this.Controls.Add(this.btnOK);
this.Controls.Add(this.label1);
this.Controls.Add(this.textBox1);
this.ResumeLayout(false);
this.PerformLayout();
btnOK.DialogResult = DialogResult.OK;
btnCancel.DialogResult = DialogResult.Cancel;
}
public string PhoneNumber {
get { return textBox1.Text; }
set { textBox1.Text = value; }
}
}
Color Fill dialog
using System;
using System.Drawing;
using System.Windows.Forms;
class ColorFillDialogBox: Form
{
GroupBox grpbox = new GroupBox();
CheckBox chkbox = new CheckBox();
public ColorFillDialogBox()
{
string[] astrColor = { "Black", "Blue", "Green", "Cyan",
"Red", "Magenta", "Yellow", "White"};
grpbox.Parent = this;
grpbox.Text = "Color";
grpbox.Location = new Point(8, 8);
grpbox.Size = new Size(96, 12 * (astrColor.Length + 1));
for (int i = 0; i < astrColor.Length; i++)
{
RadioButton radiobtn = new RadioButton();
radiobtn.Parent = grpbox;
radiobtn.Text = astrColor[i];
radiobtn.Location = new Point(8, 12 * (i + 1));
radiobtn.Size = new Size(80, 10);
}
chkbox.Parent = this;
chkbox.Text = "Fill Ellipse";
chkbox.Location = new Point(8, grpbox.Bottom + 4);
chkbox.Size = new Size(80, 10);
Button btn = new Button();
btn.Parent = this;
btn.Text = "OK";
btn.Location = new Point(8, chkbox.Bottom + 4);
btn.Size = new Size(40, 16);
btn.DialogResult = DialogResult.OK;
AcceptButton = btn;
btn = new Button();
btn.Parent = this;
btn.Text = "Cancel";
btn.Location = new Point(64, chkbox.Bottom + 4);
btn.Size = new Size(40, 16);
btn.DialogResult = DialogResult.Cancel;
CancelButton = btn;
ClientSize = new Size(112, btn.Bottom + 8);
AutoScaleBaseSize = new Size(4, 8);
}
public Color Color
{
get
{
for (int i = 0; i < grpbox.Controls.Count; i++)
{
RadioButton radiobtn = (RadioButton) grpbox.Controls[i];
if (radiobtn.Checked)
return Color.FromName(radiobtn.Text);
}
return Color.Black;
}
set
{
for (int i = 0; i < grpbox.Controls.Count; i++)
{
RadioButton radiobtn = (RadioButton) grpbox.Controls[i];
if (value == Color.FromName(radiobtn.Text))
{
radiobtn.Checked = true;
break;
}
}
}
}
public bool Fill
{
get { return chkbox.Checked; }
set { chkbox.Checked = value; }
}
}
class DrawOrFillEllipse: Form
{
Color colorEllipse = Color.Red;
bool bFillEllipse = false;
public static void Main()
{
Application.Run(new DrawOrFillEllipse());
}
public DrawOrFillEllipse()
{
ResizeRedraw = true;
Menu = new MainMenu();
Menu.MenuItems.Add("&Options");
Menu.MenuItems[0].MenuItems.Add("&Color...", new EventHandler(MenuColorOnClick));
}
void MenuColorOnClick(object obj, EventArgs ea)
{
ColorFillDialogBox dlg = new ColorFillDialogBox();
dlg.Color = colorEllipse;
dlg.Fill = bFillEllipse;
if (dlg.ShowDialog() == DialogResult.OK)
{
colorEllipse = dlg.Color;
bFillEllipse = dlg.Fill;
Invalidate();
}
}
protected override void OnPaint(PaintEventArgs pea)
{
Graphics grfx = pea.Graphics;
Rectangle rect = new Rectangle(0, 0, 50, 50);
if(bFillEllipse)
grfx.FillEllipse(new SolidBrush(colorEllipse), rect);
else
grfx.DrawEllipse(new Pen(colorEllipse), rect);
}
}
Color Scroll Dialog Box
using System;
using System.Drawing;
using System.Windows.Forms;
class ColorScrollDialogBox: Form
{
Label[] alabelName = new Label[3];
Label[] alabelValue = new Label[3];
VScrollBar[] avscroll = new VScrollBar[3];
public event EventHandler Changed;
public ColorScrollDialogBox()
{
Color[] acolor = { Color.Red, Color.Green, Color.Blue };
for (int i = 0; i < 3; i++)
{
alabelName[i] = new Label();
alabelName[i].Parent = this;
alabelName[i].ForeColor = acolor[i];
alabelName[i].Text = "&" + acolor[i].ToKnownColor();
alabelName[i].TextAlign = ContentAlignment.MiddleCenter;
avscroll[i] = new VScrollBar();
avscroll[i].Parent = this;
avscroll[i].SmallChange = 1;
avscroll[i].LargeChange = 16;
avscroll[i].Minimum = 0;
avscroll[i].Maximum = 255 + avscroll[i].LargeChange - 1;
avscroll[i].ValueChanged += new EventHandler(ScrollOnValueChanged);
avscroll[i].TabStop = true;
alabelValue[i] = new Label();
alabelValue[i].Parent = this;
alabelValue[i].TextAlign = ContentAlignment.MiddleCenter;
}
OnResize(EventArgs.Empty);
}
public Color Color
{
get
{
return Color.FromArgb(avscroll[0].Value,
avscroll[1].Value,
avscroll[2].Value);
}
set
{
avscroll[0].Value = value.R;
avscroll[1].Value = value.G;
avscroll[2].Value = value.B;
}
}
protected override void OnResize(EventArgs ea)
{
base.OnResize(ea);
int cx = ClientSize.Width;
int cy = ClientSize.Height;
int cyFont = Font.Height;
for (int i = 0; i < 3; i++)
{
alabelName[i].Location = new Point(i * cx / 3, cyFont / 2);
alabelName[i].Size = new Size(cx / 3, cyFont);
avscroll[i].Location = new Point((4 * i + 1) * cx / 12,2 * cyFont);
avscroll[i].Size = new Size(cx / 6, cy - 4 * cyFont);
alabelValue[i].Location = new Point(i * cx / 3,cy - 3 * cyFont / 2);
alabelValue[i].Size = new Size(cx / 3, cyFont);
}
}
void ScrollOnValueChanged(Object obj, EventArgs ea)
{
for (int i = 0; i < 3; i++)
if((VScrollBar) obj == avscroll[i])
alabelValue[i].Text = avscroll[i].Value.ToString();
if (Changed != null)
Changed(this, new EventArgs());
}
}
class ModelessColorScroll: Form
{
public static void Main()
{
Application.Run(new ModelessColorScroll());
}
public ModelessColorScroll()
{
ColorScrollDialogBox dlg = new ColorScrollDialogBox();
dlg.Owner = this;
dlg.Color = BackColor;
dlg.Changed += new EventHandler(ColorScrollOnChanged);
dlg.Show();
}
void ColorScrollOnChanged(object obj, EventArgs ea)
{
ColorScrollDialogBox dlg = (ColorScrollDialogBox) obj;
BackColor = dlg.Color;
}
}
Define your own dialog box and get user input
using System;
using System.Resources;
using System.Drawing;
using System.Collections;
using System.Windows.Forms;
using System.Resources;
class Test
{
static void Main(string[] args)
{
SomeCustomForm myForm = new SomeCustomForm();
myForm.Message = "Message";
myForm.ShowDialog(new Form());
if(myForm.DialogResult == DialogResult.OK)
{
Console.WriteLine(myForm.Message);
}
}
}
public class SomeCustomForm : System.Windows.Forms.Form
{
private System.ruponentModel.Container components;
private System.Windows.Forms.Button btnCancel;
private System.Windows.Forms.Button btnOK;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.TextBox txtMessage;
public SomeCustomForm()
{
InitializeComponent();
this.StartPosition = FormStartPosition.CenterParent;
}
private string strMessage;
public string Message
{
get{ return strMessage;}
set
{
strMessage = value;
txtMessage.Text = strMessage;
}
}
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows Form Designer generated code
private void InitializeComponent()
{
this.ruponents = new System.ruponentModel.Container ();
this.label1 = new System.Windows.Forms.Label ();
this.btnOK = new System.Windows.Forms.Button ();
this.btnCancel = new System.Windows.Forms.Button ();
this.txtMessage = new System.Windows.Forms.TextBox ();
label1.Location = new System.Drawing.Point (12, 8);
label1.Text = "Type in your message.";
label1.Size = new System.Drawing.Size (240, 48);
label1.TabIndex = 1;
btnOK.Location = new System.Drawing.Point (16, 104);
btnOK.DialogResult = System.Windows.Forms.DialogResult.OK;
btnOK.Size = new System.Drawing.Size (96, 24);
btnOK.TabIndex = 2;
btnOK.Text = "OK";
btnOK.Click += new System.EventHandler (this.btnOK_Click);
btnCancel.Location = new System.Drawing.Point (152, 104);
btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
btnCancel.Size = new System.Drawing.Size (96, 24);
btnCancel.TabIndex = 3;
btnCancel.Text = "Cancel";
txtMessage.Location = new System.Drawing.Point (16, 72);
txtMessage.TabIndex = 0;
txtMessage.Size = new System.Drawing.Size (232, 20);
this.Text = "Some Custom Dialog";
this.MaximizeBox = false;
this.AutoScaleBaseSize = new System.Drawing.Size (5, 13);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
this.ControlBox = false;
this.MinimizeBox = false;
this.ClientSize = new System.Drawing.Size (266, 151);
this.Controls.Add (this.btnCancel);
this.Controls.Add (this.btnOK);
this.Controls.Add (this.label1);
this.Controls.Add (this.txtMessage);
}
#endregion
protected void btnOK_Click (object sender, System.EventArgs e)
{
// OK button clicked.
// get new message.
strMessage = txtMessage.Text;
}
}
Italic User Message Dialog: your own dialog
using System;
using System.Collections.Generic;
using System.ruponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
public class ItalicUserMessageDialog : UserMessageDialog {
public ItalicUserMessageDialog() {
InitializeComponent();
}
public bool Italic {
set { checkBoxItalic.Checked = value; }
get { return checkBoxItalic.Checked; }
}
private void InitializeComponent() {
this.checkBoxItalic = new System.Windows.Forms.CheckBox();
this.SuspendLayout();
this.checkBoxItalic.AutoSize = true;
this.checkBoxItalic.Location = new System.Drawing.Point(12, 79);
this.checkBoxItalic.Size = new System.Drawing.Size(50, 17);
this.checkBoxItalic.Text = "Italic?";
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(352, 113);
this.Controls.Add(this.checkBoxItalic);
this.ResumeLayout(false);
this.PerformLayout();
}
private System.Windows.Forms.CheckBox checkBoxItalic;
}
public class UserMessageDialog : Form {
public UserMessageDialog() {
InitializeComponent();
}
public string Message {
set { txtUserInput.Text = value; }
get { return txtUserInput.Text; }
}
private void InitializeComponent() {
this.btnCancel = new System.Windows.Forms.Button();
this.btnOK = new System.Windows.Forms.Button();
this.label1 = new System.Windows.Forms.Label();
this.txtUserInput = new System.Windows.Forms.TextBox();
this.SuspendLayout();
this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.btnCancel.Location = new System.Drawing.Point(263, 73);
this.btnCancel.Size = new System.Drawing.Size(75, 23);
this.btnCancel.Text = "Cancel";
this.btnOK.DialogResult = System.Windows.Forms.DialogResult.OK;
this.btnOK.Location = new System.Drawing.Point(182, 73);
this.btnOK.Size = new System.Drawing.Size(75, 23);
this.btnOK.Text = "OK";
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(12, 9);
this.label1.Size = new System.Drawing.Size(132, 13);
this.label1.Text = "Please Enter your Message";
this.txtUserInput.Location = new System.Drawing.Point(13, 35);
this.txtUserInput.Size = new System.Drawing.Size(325, 20);
this.AcceptButton = this.btnOK;
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.CancelButton = this.btnCancel;
this.ClientSize = new System.Drawing.Size(350, 113);
this.Controls.Add(this.txtUserInput);
this.Controls.Add(this.label1);
this.Controls.Add(this.btnOK);
this.Controls.Add(this.btnCancel);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.ShowInTaskbar = false;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
this.ResumeLayout(false);
this.PerformLayout();
}
private System.Windows.Forms.Button btnCancel;
private System.Windows.Forms.Button btnOK;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.TextBox txtUserInput;
}
public class MainWindow : Form {
private string userMessage = "Default Message";
private bool textIsItalic = false;
public MainWindow() {
InitializeComponent();
}
private void exitToolStripMenuItem_Click(object sender, EventArgs e) {
Application.Exit();
}
private void configureToolStripMenuItem_Click(object sender, EventArgs e) {
ItalicUserMessageDialog dlg = new ItalicUserMessageDialog();
dlg.Message = userMessage;
dlg.Italic = textIsItalic;
if (DialogResult.OK == dlg.ShowDialog()) {
userMessage = dlg.Message;
textIsItalic = dlg.Italic;
Invalidate();
}
dlg.Dispose();
}
private void MainWindow_Paint(object sender, PaintEventArgs e) {
Graphics g = e.Graphics;
Font f = null;
if (textIsItalic)
f = new Font("Times New Roman", 24, FontStyle.Italic);
else
f = new Font("Times New Roman", 24);
g.DrawString(userMessage, f, Brushes.DarkBlue,50, 50);
}
private void InitializeComponent() {
this.menuStrip1 = new System.Windows.Forms.MenuStrip();
this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.exitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.configureToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.menuStrip1.SuspendLayout();
this.SuspendLayout();
this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.fileToolStripMenuItem,
this.toolsToolStripMenuItem});
this.menuStrip1.Location = new System.Drawing.Point(0, 0);
this.menuStrip1.Size = new System.Drawing.Size(390, 24);
this.menuStrip1.Text = "menuStrip1";
this.fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.exitToolStripMenuItem});
this.fileToolStripMenuItem.Text = "&File";
this.exitToolStripMenuItem.Text = "E&xit";
this.exitToolStripMenuItem.Click += new System.EventHandler(this.exitToolStripMenuItem_Click);
this.toolsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.configureToolStripMenuItem});
this.toolsToolStripMenuItem.Text = "&Tools";
this.configureToolStripMenuItem.Text = "&Configure";
this.configureToolStripMenuItem.Click += new System.EventHandler(this.configureToolStripMenuItem_Click);
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(390, 182);
this.Controls.Add(this.menuStrip1);
this.MainMenuStrip = this.menuStrip1;
this.Paint += new System.Windows.Forms.PaintEventHandler(this.MainWindow_Paint);
this.menuStrip1.ResumeLayout(false);
this.ResumeLayout(false);
this.PerformLayout();
}
private System.Windows.Forms.MenuStrip menuStrip1;
private System.Windows.Forms.ToolStripMenuItem fileToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem exitToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem toolsToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem configureToolStripMenuItem;
[STAThread]
static void Main() {
Application.EnableVisualStyles();
Application.Run(new MainWindow());
}
}
Use DialogResult property in Form
using System;
using System.Drawing;
using System.Windows.Forms;
class BetterDialog: Form
{
public static void Main()
{
Application.Run(new BetterDialog());
}
public BetterDialog()
{
Menu = new MainMenu();
Menu.MenuItems.Add("&Dialog!", new EventHandler(MenuOnClick));
}
void MenuOnClick(object obj, EventArgs ea)
{
BetterDialogBox dlg = new BetterDialogBox();
DialogResult dr = dlg.ShowDialog();
Console.WriteLine(dr);
}
}
class BetterDialogBox: Form
{
public BetterDialogBox()
{
Text = "Better Dialog Box";
FormBorderStyle = FormBorderStyle.FixedDialog;
ControlBox = false;
MaximizeBox = false;
MinimizeBox = false;
ShowInTaskbar = false;
StartPosition = FormStartPosition.Manual;
Location = ActiveForm.Location +
SystemInformation.CaptionButtonSize +
SystemInformation.FrameBorderSize;
Button btn = new Button();
btn.Parent = this;
btn.Text = "OK";
btn.Location = new Point(50, 50);
btn.Size = new Size (10 * Font.Height, 2 * Font.Height);
btn.DialogResult = DialogResult.OK;
AcceptButton = btn;
btn = new Button();
btn.Parent = this;
btn.Text = "Cancel";
btn.Location = new Point(50, 100);
btn.Size = new Size (10 * Font.Height, 2 * Font.Height);
btn.DialogResult = DialogResult.Cancel;
CancelButton = btn;
}
}