1 / 31

Lecture 6:

Lecture 6:. Advanced GUI Controls. Topics. Up to now we have used simple controls such as buttons and textboxes. Now we will review some interactive (e.g. dialog) controls available to the C# applications developer.

lahela
Download Presentation

Lecture 6:

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Lecture 6: Advanced GUI Controls

  2. Topics Up to now we have used simple controls such as buttons and textboxes. Now we will review some interactive (e.g. dialog) controls available to the C# applications developer. OpenFileDialog and SaveFileDialog and the associated controls interact with the user to determine the location and name of a file to read or write. These common dialogs are not for the purpose of actually reading or writing files. Other advanced controls we will cover here include MessageBoxes with decisions, the Calender, ListBoxes, ComboBoxes, and TabControls. In addition, we continue to review methods for reading and writing text files using StreamReader and StreamWriter. This will be our first look at Multiple Document Interfaces (MDI's). The demo program WidgetDemo is an example of an MDI program that also happens to illustrate the use of several GUI controls.

  3. Reading a Textfile array.txt 10 0 1 2 3 4 5 6 7 6 9 1 2 3 4 5 6 7 8 9 0 2 3 4 5 6 7 8 9 0 1 3 4 5 6 7 8 9 0 1 2 4 5 6 7 8 9 0 1 2 3 5 6 7 8 9 0 1 2 3 4 6 7 8 9 0 1 2 3 4 5 7 8 9 0 1 2 3 4 5 6 8 9 0 1 2 3 4 5 6 7 9 0 1 2 3 4 5 6 7 8 In the example code ReadTextArray a 10x10 array of integers named array.txt is read and loaded into a two-dimensional array.

  4. Reading an Array of Integers string fname = ""; string textline = ""; fname = txtFilename.Text; int j; try { TextReader tr = newStreamReader(fname); n = Convert.ToInt32(tr.ReadLine()); txtDisplay.Text = Convert.ToString(n) + "\r\n"; W = newint[n,n]; for (int i = 0; i < n; i++) { textline = tr.ReadLine(); txtDisplay.Text = txtDisplay.Text + " " + textline + "\r\n"; j = 0; foreach (string subString in textline.Split(' ')) { if (subString != "") { W[i,j] = Int32.Parse(subString); j += 1; } } } tr.Close(); } catch { txtFilename.Text = "no such file"; }

  5. Using the Array privatevoid btnCompute_Click(object sender, EventArgs e) { int sum; string str = ""; txtDisplay.Text = ""; txtDisplay.Text += "\r\n"; for (int i=0; i < n; i++) { sum = 0; for (int j=0; j < n; j++) { sum += W[i, j]; } str += "Row " + Convert.ToString(i) + " = " + Convert.ToString(sum) + "\r\n"; } txtDisplay.Text += str; }

  6. The Benefit of Checking for Empty String array.txt 10 0 1 2 3 4 5 6 7 6 9 1 2 3 4 5 6 7 8 9 0 2 3 4 5 6 7 8 9 0 1 3 4 5 6 7 8 9 0 1 2 4 5 6 7 8 9 0 1 2 3 5 6 7 8 9 0 1 2 3 4 6 7 8 9 0 1 2 3 4 5 7 8 9 0 1 2 3 4 5 6 8 9 0 1 2 3 4 5 6 7 9 0 1 2 3 4 5 6 7 8

  7. The Purpose of Common File Dialogs: to retreive a path and filename using System.IO; : : privatevoid OnFileOpen(object sender, EventArgs e) { OpenFileDialog dialog = newOpenFileDialog(); dialog.Filter = "text files (*.txt)|*.txt"; dialog.ShowDialog(); filename = dialog.FileName; OpenFile(); } privatevoid OnFileSaveAs(object sender, EventArgs e) { if (dlgSaveFile.ShowDialog() == DialogResult.OK) { filename = dlgSaveFile.FileName; SaveFile(); } }

  8. Printing a Document with Images and Text try { printDocument.Print(); } catch (InvalidPrinterException ex) { MessageBox.Show(ex.Message, "Print Ticket", MessageBoxButtons.OK, MessageBoxIcon.Error); } : : privatevoid printDocument_PrintPage(object sender, PrintPageEventArgs e) { Bitmap center = newBitmap("ticket_header_center.jpg"); string line = ""; line = txtFirst.Text + " " + txtLast.Text; e.Graphics.DrawString(line, newFont("Arial", 12),Brushes.Black, 20, 240); line = txtStreet.Text; e.Graphics.DrawString(line, newFont("Arial", 12), Brushes.Black, 20, 260); line = txtCity.Text + ", " + txtState.Text + " " + txtZip.Text; e.Graphics.DrawString(line, newFont("Arial", 12), Brushes.Black, 20, 280); e.Graphics.DrawImage(center,275, 20); }

  9. The Toolbox Widget Demo The Widget Demo is an example of an MDI application Each demo is presented as a Child Form under the Widget menu.

  10. establishes widgetMain as the MdiParent of mouseChild a new mouseChild form is created here and is displayed inside the widgetMain form.

  11. Mouse Demo privatePoint mpt; public mouseChild(WidgetDemo.widgetMain parent) { InitializeComponent(); this.MdiParent = parent; } privatevoid mouseChild_MouseMove(object sender, MouseEventArgs e) { Point lpt = newPoint(); mpt = MousePosition; tbxXpos.Text = Convert.ToString(mpt.X); tbxYpos.Text = Convert.ToString(mpt.Y); Form mschild = this.ActiveMdiChild; lpt = this.Location; tbxrelXpos.Text = Convert.ToString(mpt.X - lpt.X - 6); tbxrelYpos.Text = Convert.ToString(mpt.Y - lpt.Y - 74); } privatevoid mouseChild_MouseDown(object sender, MouseEventArgs e) { MessageBox.Show(Convert.ToString(e.Button) + " button Pressed"); }

  12. messageBox Demo publicpartialclassmsgBoxChild : Form { privateMessageBoxButtons buttonType = MessageBoxButtons.OK; privateMessageBoxIcon iconType = MessageBoxIcon.Exclamation; public msgBoxChild(WidgetDemo.widgetMain parent) { InitializeComponent(); this.MdiParent = parent; rbExclamation.Checked = true; rb_OK.Checked = true; } privatevoid btnDisplayMsgBox_Click(object sender, EventArgs e) { if (rb_OK.Checked) buttonType = MessageBoxButtons.OK; if (rb_OKCancel.Checked) buttonType = MessageBoxButtons.OKCancel; if (rb_AbortRetryIgnore.Checked) buttonType = MessageBoxButtons.AbortRetryIgnore; : : if (rbQuestion.Checked) iconType = MessageBoxIcon.Question; if (rbStop.Checked) iconType = MessageBoxIcon.Stop; if (rbWarning.Checked) iconType = MessageBoxIcon.Warning; DialogResult result = MessageBox.Show("Your message goes here.", "Custom MessageBox", buttonType, iconType); } }

  13. pictureBox Demo privatevoid newToolStripButton_Click(object sender, EventArgs e) { picBox.Image = null; this.Width = 200; this.Height = 200; } privatevoid openToolStripButton_Click(object sender, EventArgs e) { int minWidth = 100; int minHeight = 50; string fileName = ""; OpenFileDialog dlg = newOpenFileDialog(); if (dlg.ShowDialog() == DialogResult.OK) { fileName = dlg.FileName; Bitmap img = newBitmap(fileName); picBox.Image = img; if (img.Width + 10 > minWidth) this.Width = img.Width + 10; else this.Width = minWidth; if (img.Height + 60 > minHeight) this.Height = img.Height + 60; else this.Height = minHeight; } }

  14. monthCalendar Demo privateDateTime dtobj = newDateTime(); public calChild(WidgetDemo.widgetMain parent) { InitializeComponent(); this.MdiParent = parent; } privatevoid monthCalendar_MouseUp(object sender, MouseEventArgs e) { dtobj = monthCalendar.SelectionStart; tbxDay.Text = Convert.ToString(dtobj.Day); tbxMonth.Text = Convert.ToString(dtobj.Month); tbxYear.Text = Convert.ToString(dtobj.Year); tbxDate.Text = Convert.ToString(dtobj.Date); tbxDayOfYear.Text = Convert.ToString(dtobj.DayOfYear); tbxDayOfWeek.Text = Convert.ToString(dtobj.DayOfWeek); }

  15. linkLabel Demo privatevoid linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { linkLabel1.LinkVisited = true; System.Diagnostics.Process.Start(@"C:\"); } privatevoid linkLabel2_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { linkLabel2.LinkVisited = true; System.Diagnostics.Process.Start("notepad"); } privatevoid linkLabel3_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { linkLabel3.LinkVisited = true; System.Diagnostics.Process.Start("http://www.google.com"); }

  16. listBox Demo privatevoid listBoxFavs_MouseUp(object sender, MouseEventArgs e) { rtbxSelected.Text = ""; foreach (string item in listBoxFavs.SelectedItems) { rtbxSelected.Text += item + "\n"; } }

  17. comboBox Demo

  18. Reading the country_data File privatestring[,] countrydata = newstring[237, 3]; privatevoid load_country_data() { string textline; int colnum; int rownum = 0; StreamReader tr = newStreamReader("country_data.txt"); do { textline = tr.ReadLine(); colnum = 0; foreach (string str in textline.Split('\t')) { if (str != "xxx") { countrydata[rownum, colnum] = str; colnum += 1; } else break; } rownum += 1; } while (textline != "xxx"); tr.Close(); } public comboChild(WidgetDemo.widgetMain parent) { InitializeComponent(); this.MdiParent = parent; load_country_data(); comboCountryList.Text = "Select a Country"; }

  19. ComboBox SelectedIndexChange Event privatevoid comboCountryList_SelectedIndexChanged(object sender, EventArgs e) { int index = -1; try { index = comboCountryList.SelectedIndex; rtbDisplay.Text = "Selected index = " + Convert.ToString(index) + "\n"; rtbDisplay.Text += "Population = " + countrydata[index,2] + "\n"; rtbDisplay.Text += "Rank by Population = " + countrydata[index,1] + "\n"; rtbDisplay.Text += "Gross Domestic Product = " + countrydata[index,0] + "\n"; } catch { comboCountryList.Text = "Select a Country"; } }

  20. tabControl Demo publicpartialclasstabChild : Form { privateint[] face = newint[4] { 0, 0, 0, 0 }; privateBitmap[] head = newBitmap[8]; privateBitmap[] eyes = newBitmap[8]; privateBitmap[] nose = newBitmap[8]; privateBitmap[] chin = newBitmap[8]; privatebool in_color = true;

  21. tabControl Demo Image Load publicvoid load_images() { string[] person = newstring[] {"churchill", "eastwood", "henryVIII", "joker", "mona", "monroe", "rubens", "vangogh"}; string filename; for (int i = 0; i < 8; i++) { filename = person[i] + "_01.jpg"; head[i] = newBitmap(filename); filename = person[i] + "_02.jpg"; eyes[i] = newBitmap(filename); filename = person[i] + "_03.jpg"; nose[i] = newBitmap(filename); filename = person[i] + "_04.jpg"; chin[i] = newBitmap(filename); } }

  22. tabControl Demo show_face( ) publicvoid show_face() { if (in_color) { picBoxHead.Image = head[face[0]]; picBoxEyes.Image = eyes[face[1]]; picBoxNose.Image = nose[face[2]]; picBoxChin.Image = chin[face[3]]; } else { Bitmap img0 = newBitmap(head[face[0]]); Grayscale(ref img0); picBoxHead.Image = img0; Bitmap img1 = newBitmap(eyes[face[1]]); Grayscale(ref img1); picBoxEyes.Image = img1; Bitmap img2 = newBitmap(nose[face[2]]); Grayscale(ref img2); picBoxNose.Image = img2; Bitmap img3 = newBitmap(chin[face[3]]); Grayscale(ref img3); picBoxChin.Image = img3; } }

  23. Selecting face for Display privatevoid btnDisplay_Click(object sender, EventArgs e) { if (rbChurchill_01.Checked) face[0] = 0; if (rbEastwood_01.Checked) face[0] = 1; if (rbHenry_01.Checked) face[0] = 2; if (rbJoker_01.Checked) face[0] = 3; if (rbMona_01.Checked) face[0] = 4; if (rbMonroe_01.Checked) face[0] = 5; if (rbRubens_01.Checked) face[0] = 6; if (rbVanGogh_01.Checked) face[0] = 7; if (rbChurchill_02.Checked) face[1] = 0; if (rbEastwood_02.Checked) face[1] = 1; if (rbHenry_02.Checked) face[1] = 2; if (rbJoker_02.Checked) face[1] = 3; if (rbMona_02.Checked) face[1] = 4; if (rbMonroe_02.Checked) face[1] = 5; if (rbRubens_02.Checked) face[1] = 6; if (rbVanGogh_02.Checked) face[1] = 7; if (rbChurchill_03.Checked) face[2] = 0; if (rbEastwood_03.Checked) face[2] = 1; if (rbHenry_03.Checked) face[2] = 2; if (rbJoker_03.Checked) face[2] = 3; if (rbMona_03.Checked) face[2] = 4; if (rbMonroe_03.Checked) face[2] = 5; if (rbRubens_03.Checked) face[2] = 6; if (rbVanGogh_03.Checked) face[2] = 7; if (rbChurchill_04.Checked) face[3] = 0; if (rbEastwood_04.Checked) face[3] = 1; if (rbHenry_04.Checked) face[3] = 2; if (rbJoker_04.Checked) face[3] = 3; if (rbMona_04.Checked) face[3] = 4; if (rbMonroe_04.Checked) face[3] = 5; if (rbRubens_04.Checked) face[3] = 6; if (rbVanGogh_04.Checked) face[3] = 7; show_face(); } There is a better way to deal with large numbers of Widget properties... for example, How would you create an array of radioButtons?

  24. GDI+ Drawing Demo publicpartialclassgdiChild : Form { protectedoverridevoid OnPaint(PaintEventArgs e) { Graphics g = e.Graphics; Random rnd = newRandom(); Pen MyPen = newPen(Color.Red); Point a = newPoint(50, 50); Point b = newPoint(250, 250); for (int i = 0; i < 100; i++) { a.X = rnd.Next(10, this.Width - 30); a.Y = rnd.Next(10, this.Height - 60); b.X = rnd.Next(10, this.Width - 30); b.Y = rnd.Next(10, this.Height - 60); MyPen.Color = Color.FromArgb(rnd.Next(0, 255), rnd.Next(0, 255), rnd.Next(0, 255)); g.DrawLine(MyPen, a, b); } } onPaint is used for cleaning up windows after move and resize events...not for drawing

  25. gphChild Improves Drawing with GDI+ no auto-draw implemented privatevoid PaintThis() { Graphics g = pictureBox1.CreateGraphics(); Random rnd = newRandom(); Pen MyPen = newPen(Color.White); g.Clear(Color.White); Point a = newPoint(50, 50); Point b = newPoint(250, 250); for (int i = 0; i < 100; i++) { a.X = rnd.Next(10, this.Width - 30); a.Y = rnd.Next(10, this.Height - 60); b.X = rnd.Next(10, this.Width - 30); b.Y = rnd.Next(10, this.Height - 60); MyPen.Color = Color.FromArgb(rnd.Next(0, 255), rnd.Next(0, 255), rnd.Next(0, 255)); g.DrawLine(MyPen, a, b); } build your own methods for drawing. This method is called with a click-event for the picturebox

More Related