490 likes | 673 Views
Windows Forms. · zestaw narzędzi wspomagający tworzenie aplikacji okienkowych typu formularz + elementy sterujące · Project Windows Application using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms;
E N D
Windows Forms ·zestaw narzędzi wspomagający tworzenie aplikacji okienkowych typu formularz + elementy sterujące ·Project Windows Application using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data;
Object MarshalByRefObject Component Control ScrollableControl ContainerControl Form Hierarchia klas
·Object podstawowa klas bazowa·MarshalByRefObject umożliwiaprzetwarzanie formularza utworzonego na odległym komputerze poprzez referencję·Component tworzy komponent ( kontener)dla przechowywania obiektów·Control definiuje podstawowe cechyformularza i podstawową obsługę zdarzeń·ScrollableControl umożliwia dodawanie suwaków i przewijanie tekstu·ContainerControl umożliwia dziedziczenie formularzy·Form składowe opisujące formularz
namespace Empty { public class Form1: System.Windows.Forms.Form // partial { private System.ComponentModel.Containercomponents = null; public Form1() { InitializeComponent(); } protected override void Dispose( bool disposing ) { . . . }
private void InitializeComponent() { this.components = new System.ComponentModel.Container(); this.Size = new System.Drawing.Size(300,300); this.Text = ”Form1”; } static void Main() { Application.Run(new Form1()); } } }
·Form Designer dodawanie elementów sterujących·Properties ustalanie parametrów i obsługa zdarzeń // klasa Form1 private System.Windows.Forms.Button Guzik_1; // funkcja InitializeComponent this.Guzik_1 = new System.Windows.Forms.Button(); FirstForm
// Guzik_1 // dla zmienionych parametrów this.Guzik_1.Location = new System.Drawing.Point(128, 104); this.Guzik_1.Name = „Guzik_1”; this.Guzik_1.TabIndex = 0; this.Guzik_1.Text = „Czekam...”; this.Guzik_1.Click += new System.EventHandler(this.OnGuzik); this.Controls.AddRange(new System.Windows.Forms.Control[] {this.Guzik_1}); // funkcja obsługi private void OnGuzik(object sender, System.EventArgs e) { .... } Nowy Guzik
Obsługa myszy ·zdarzenia związane z myszką MouseClick MouseDoubleClick MouseDown MouseEnter MouseHover MouseMove MouseUp MouseLeave
private voidForm1_MouseDown (object sender, System.Windows.Forms.MouseEventArgs e); { ... } ·składowe klasy MouseEventArgs Button // left, middle, right Clicks // liczba naciśnięć Delta // liczba obrotów kółka X , Y // współrzędne w momencie //naciśnięcia
Obsługa klawiatury KeyDown KeyPress KyeUp private void OnKey (object sender, System.Windows.Forms.KeyEventArgs e); { ... } ·składowe klasy KeyEventArgs Alt, Control, Shift, Modifiers KeyCode, KeyData, KeyValue ·Form1.KeyPreview = true;
Dodawanie menu · Form Designer wpisać nazwy pozycji menu ·dla pozycji końcowych zdefiniować funkcjeobsługi w oknie Properties ( Events / Click )i ewentualnie inne parametry ·dekorowanie pozycji menu składowe klasy MenuItem Checked, Enabled, ShortCut, ShowShortCut, Text
Pasek stanu ·dołączany za pomocą Form Designer, może zawierać różne rodzaje informacji ·składowe klasy StatusStrip : StatusBar ToolStripStatusLabel// teksty ToolStripProgressBar// postęp ToolStripDropDownButton// lista wyboru ToolStripSplitButton // przycisk i lista wyboru
·wyświetlanie podpowiedzi w panelu obsługa zdarzenia MouseEnter ( np. pozycji menu) private void OnMouseEnter (object sender, System.EventArgs e) {toolStripStatusLabel1.Text = "Kopiowanie."; }
·wyłączanie podpowiedzi private void OnMouseLeave (object sender, System.EventArgs e) { statusBarPanel1.Text = "."; }
Pasek narzędzi ·za pomocą Form Designer dołączamy pasek obiekt ToolStrip ·można dołączać i edytować poszczególne przyciski narzędziToolStripButton ·dla przycisków można definiować opisy (Text) i dymki (ToolTipText) ·obsługa naciśnięcia przcisku w okniewłaściwości ToolStripButtondodać funkcję obsługi zdarzenia Click
Elementy sterujące ·kolejność zdarzeń generowanych przy kontaktachz elementem sterującym: Enter Leave Validating Validated ·gdy CausesValidation == false to zdarzenia Validating i Validated nie są generowane
·Button przeciągnąć z przybornika, ustalić właściwości i zdefiniować funkcje obsługi zdarzeń privatevoidCommon_Button_Click (object sender, EventArgs e) { Button bb = (Button)sender; textBox1.Text = (string)bb.Tag; }
·TextBox przeciągnąć z panelu elementów, ustalić właściwości (np. tekst początkowy), dodać obsługę zdarzeń np. TextChangedlub Leave private void OnTextBox1Leave (object sender, System.EventArgs e) { string ss = textBox1.Text; MessageBox.Show(ss); } ·można utworzyć pole dla wprowadzania hasła ·można dodać suwaki przewijania ·maskowanie MaskedTextBox ·sprawdzanie poprawności
Przyciski radiowe • ·aby uzyskać 1 z N należy najpierw umieścić GroupBox, a potem wewnątrz same przyciski • ·odczytanie stanu przycisku • if ( radioYellow.Checked ) • { ... }
Dymki z podpowiedzią ·przeciągnąć ToolTip z panelu (wyświetli się u dołu poza formularzem) ·w oknie właściwości danego elementu wstawić tekst dymka np. do pola ToolTip on toolTip1 ·realizacja (automatyczna) this.toolTip1.SetToolTip (this.radioButton1, "I am blue.");
Przeciągnij i Upuść Drag & Drop ·źródło obsługa MouseDown privatevoid OnMouseDown(object sender,MouseEventArgs e) { TextBox tt = (TextBox)sender; tt.SelectAll(); tt.DoDragDrop(tt.Text, DragDropEffects.Copy); }
·cel obsługa DragEnter privatevoid OnDragEnter(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(DataFormats.Text)) e.Effect = DragDropEffects.Copy; else e.Effect = DragDropEffects.None; }
·cel obsługa DragDrop privatevoid OnDragDrop(object sender, DragEventArgs e) { T2.Text += (string)e.Data.GetData(DataFormats.Text); } DraDro
Schowek (System.Clipboard – clipbrd.exe) Clipboard.SetText(textBox.Text); Clipboard.textBox.Copy(); // selected text Clipboard.SetText((string)listBox.SelectedItem); // if(Clipboard.ContainsText()) textBox2.Text = Clipboard.GetText();
//// obrazy .bmp Bitmap bm =new Bitmap("P2.bmp"); Clipboard.SetImage(bm); // if (Clipboard.ContainsImage()) pictureBox1.Image = Clipboard.GetImage();
///// dźwięki .wav // FileStream fs =new FileStream("notify.wav"); Clipboard.SetAudio(fs); // System.Media.SoundPlayer sp = new SoundPlayer(); if (Clipboard.ContainsAudio()) { sp.Stream = Clipboard.GetAudioStream(); sp.Load(); sp.Play(); } Clipboard
Dalsze elementy sterujące • NumericUpDown • CheckBox // Checked • DateTimePicker • MonthCalendar • ProgressBar • ListBox • ComboBox // DropDownList • WebBrowser // Navigate
CheckedList • TreeView • ListView • TabControl • Chart • TableLayoutPanel • FlowLayoutPanel • Timer • BackGroundWorker Chart, Prąd3Fazowy
Powiązania ( bindings ) List<string> ll = newList<string>(); string[] ts= new string [ 5 ]; // bindingSource1.DataSource = (object)ts; bindingSource2.DataSource = (object)ll; comboBox1.DataSource = (object)bindingSource1; listBox1.DataSource = (object)bindingSource2; // bindingSource1.SuspendBinding(); bindingSource1.ResumeBinding(); bindingSource2.SuspendBinding(); bindingSource2.ResumeBinding(); DataBind
Formularze wielojęzykowe • using System.Threading; • using System.Globalization; • using System.Resources; • using System.Reflection; • ·umieścić elementy na formie – teksty domyślne • ·ustawić Localizable = true • ·wybrać język ( Language ) • ·wpisać opisy wszystkich elementów • ·dodać funkcję zmiany opisów .....
privatevoid NewLang(string cul) • { ComponentResourceManager crm = • new ComponentResourceManager(typeof(Form1)); • CultureInfo ci = newCultureInfo(cul); • foreach (Control cc inthis.Controls) • { • crm.ApplyResources(cc, cc.Name, ci ); • if(cc.Controls != null) • for (int i = 0; i < cc.Controls.Count; ++i) • crm.ApplyResources(cc.Controls[i], • cc.Controls[i].Name, ci); • }}
privatevoid NewLang(string cul) { CultureInfo ci = newCultureInfo(cul); Thread.CurrentThread.CurrentUICulture = ci; rm = newResourceManager("namespace.Form1",Assembly.GetExecutingAssembly()); button1.Text = rm.GetString("button1.Text"); label2.Text = rm.GetString("label2.Text"); ............. }
Teksty z zasobów ·pobrać: ResourceManager rm2 = MLangTest.Properties.Resources.ResourceManager; lub ·Add -> New item -> Recources file -> Resource1.resx ·dodać nazwy tekstów i teksty ResourceManager r1 = Resource1.ResourceManager; textBox1.Text = r1.GetString("J2"); ............ MuLan
Okna dialogowe ·dialogi standardowe osadzanie z panelu elementów poza formularzem ·wyświetlanie i odczytywanie wyniku string str ; if (colorDialog1.ShowDialog() == DialogResult.OK) { str = colorDialog1.Color.ToString(); MessageBox.Show(str); } // Color [A=255,R=139,G=201,B=98] // // filtr dla openFileDialog openFileDialog1.Filter = "Program files|*.cs"; Dial
Dialogi niestandardowe ·utworzyć nowy formularz Dialog(Aplikacja/Add/Add Windows Form) ·usunąć elementy ControlBox, MaximizeBox, MinimizeBox (false) ·dodać przyciski OK i Cancel i ustalić DialogResult
·w dowolnej funkcji (np. obsługa menu) dodać Dialog dia = new Dialog(); dia.ShowDialog(); // modalny dia.Show(); // nie modalny ·do dialogu dodać dowolne elementy sterujące ·wymiana danych poprzez obiekt dialogunp. dla ListBox CarMakes CarMakes.SelectedIndex = 5; // 0,1,... CarDialog.ShowDialog(); string str = CarMakes.Text;// modyfikator ·dziedziczenie form (elementy bierne) ( Build Add Inherited Form ) DzieForm
Środowisko graficzne GDI+ ·przestrzenie nazw System.Drawing System.Drawing.Drawing2D System.Drawing.Imaging System.Drawing.Printing System.Drawing.Text ·klasy pomocnicze Point PointF Rectangle RectangleFSize SizeF Region// rectangles + paths
uzyskiwanie obiektu Graphics -obsługakomunikatu Paint private void OnMyPaint( object sender, System.Windows.Forms.PaintEventArgs e ) { Graphics g = e.Graphics; .... } -z obrazu Graphics g =Graphics.FromImage(pictureBox1.Image); -z uchwytu Graphics g =Graphics.FromHwnd(button1.Handle);
unieważnianie obszaru klienta Invalidate( ) Invalidate(Rect) określanie koloru tła Graphics g = e.Graphics; e.Clear(Color.Yellow); e.Clear(Color.FromArgb( 128, 255,0,0)); // (10, 200,120) Paint1
narzędzia graficzne : czcionki pióra pędzle definiowanie czcionki Font f = new Font("Arial", 12, FontStyleBold | FontStyleUnderline);
definiowanie pióra Pens.Firebrick // i inne kolory Pen pen1 = newPen(Color.Red, 5);// solid // styl linii pen1.DashStyle = DashStyle.Dash; // .DashDot, .DashDotDot, .Dot, .Solid // // zakończenia linii pen1.StartCap = LineCap.Flat; pen1.EndCap = LineCap.Square; // .Triangle, .ArrowAnchor, .RoundAnchor ...
definiowanie pędzla Brushes.Blue // i inne kolory SolidBrush brush1 = new SolidBrush(Color.Red); HatchBrush brush2 =new HatchBrush(HatchStyle, linesColor, backColor); LinearGradientBrush brush3 = new LinearGradientBrush( Rectangle, StartColor, EndColor ); // Angle Paint2
wyprowadzanie tekstu g.DrawString( string, Font, Brush, RectangleF | PointF, StringFormat ); Font f = new Font("Tahoma", 40); g.DrawString( "Napis", f, Brushes.Red, 50, 50); // StringFormat sf = new StringFormat(); sf.FormatFlags =StringFormatFlags.DirectionVertical; g.DrawString("ALFA", f, Brushes.Green, 50, 50, sf );
składowe klasy Graphics do rysowania(niektóre) DrawLine // Arc, Bezier, // Ellipse, Pie, Rectangle FillEllipse // Pie, Polygon, Rectangle
kolekcja figur GraphicsPath GraphicsPath gp =null; Point[ ] T1 = { point1, point2, point3 }; Point[ ] T2 = { point4, point5, point6 }; // gp = newGraphicsPath(); gp.AddPolygon(T1); gp.AddPolygon(T2); graphics.DrawPath(Pens.Red, gp); Paint3
przetwarzanie obrazów string file = @"d:\Ob1.bmp"; Bitmap b1= newBitmap(file); // odczytywanie pictureBox1.Image = b1;// wyświetlanie // b1.Save(@"d:\Ob2.jpg",// zapisywanie System.Drawing.Imaging.ImageFormat.Jpeg); Picture1
przetwarzanie pikseli Color px; for (int x = 0; x < bitmap2.Width; ++x) for (int y = 0; y < bitmap2.Height; ++y) { px = bitmap2.GetPixel(x, y); if ( px ... ) bitmap2.SetPixel(x, y, Color.Red); } Picture2
przetwarzanie obrazów GDI+ Bitmap bb = new Bitmap(350,200); pictureBox1.Image = bb; Graphics g = Graphics.FromImage(pictureBox1.Image); // draw, fill bb = (Bitmap)pictureBox1.Image; // process pictureBox1.Image = bb; Picture3