Introduction to C#         Lecture 2            FCISSummer training 2010, 1st year.
Contents      References and reference types.      Arrays in C#      The List<T> generic collection.      foreach    ...
References      In C#, classes are an example of reference     types.      Variables whose type is a reference type foll...
References - quiz      class Person {     public string name; } class Test {     static void Main() {          Person p1,...
Value types      Consider the following code:     Person x, y;     x = new Person( );     x.Name = “samy”;     y = x;    ...
Value types      This means that structs in C# are very different from     classes, while in C++ structs and classes are ...
Arrays      C# arrays declare the full type before the array name      C++: int x[10];      C#:   int[ ] x;      Since a...
Generics and List<T>      The List<T> class works like an array, but auto-expands when you add more     elements to it. ...
Foreach      Foreach is used to iterate over data in a collection      Syntax:     foreach(<Type> <var> in <collection>)...
Foreach      Foreach does not work only on arrays, it works on     many, many collection classes:              It works ...
The System.Drawing.Graphics class      Graphics is a class that represents something with     drawing capabilities (scree...
Pen?      A pen is an object used by Graphics to draw lines (like     a real pen).      How to obtain a pen?           ...
More Graphics functions...      g.FillRectangle(Brush b, Rectange r)      g.FillRectangle(Brush b, int x, int y, int w, ...
The graphics class is rich...      Drawing images:              Bitmap b = Bitmap.FromFile("....");              g.Draw...
The paint event      Some actions can invalidate the drawing on a form:              Minimizing and then maximizing the ...
The paint event    private void Form1_Paint(object sender, PaintEventArgs e){}    An object of type PaintEventArgs is gi...
Obtaining a Graphics without Paint      I want to draw on the form, but not in the paint event      How do I get a graph...
KeyDown and KeyUp      The KeyDown event is called when the user pushes a     key on the keyboard.      The KeyUp event ...
KeyDown and KeyUp private void Form1_KeyDown(object sender,                               KeyEventArgs e) {     if (e.KeyC...
KeyPress      The KeyPress event is called when a character is     generated by the keyboard.      It has a KeyPressEven...
Remarks from MSDN      Key events occur in the following order:     1. KeyDown     2. KeyPress     3. KeyUp      The Key...
Sample program      The "MoveImageWithKeyboard" sample.
Next time...      Creating your own classes.
Upcoming SlideShare
Loading in …5
×

C# Summer course - Lecture 2

816 views
714 views

Published on

C# summer training for FCIS, 2010. Lecture 2

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
816
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
17
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

C# Summer course - Lecture 2

  1. 1. Introduction to C# Lecture 2 FCISSummer training 2010, 1st year.
  2. 2. Contents  References and reference types.  Arrays in C#  The List<T> generic collection.  foreach  Graphics and OnPaint( )  KeyDown, KeyUp and KeyPress  Example: Controlling a picture w/ the keyboard
  3. 3. References  In C#, classes are an example of reference types.  Variables whose type is a reference type follow reference semantics: The variables stores a reference to the object, not the object itself.  Values who have a reference type and are not initialized have the value of null  In the assignment: x=y x does not take a copy of the object y refers to, but takes a copy of the reference.  Lets see this with the debugger...
  4. 4. References - quiz  class Person { public string name; } class Test { static void Main() { Person p1, p2, p3; p1 = new Person( ); p1.Name = "Ramy"; p2 = p1; p3 = p2; p2 = new Person( ); p2.Name = "Saif"; p3.Name = "Samar"; } }  Whats the final value of p1.name, p2.name and p3.name ?
  5. 5. Value types  Consider the following code: Person x, y; x = new Person( ); x.Name = “samy”; y = x; y.Name = "Maher";  Now what will be the value of x.Name?  If Person is a class, then x and y will be references to the same object, and x.Name will become "Maher"  If Person is a struct, y=x will make a copy of x and assign it to y, so y will be a different object.  In this case, x.Name will remain "Samy" and y.Name will be "Maher"
  6. 6. Value types  This means that structs in C# are very different from classes, while in C++ structs and classes are almost the same.  The C# basic data types (int, float...) are value types (in fact, they are considered structs by the language).  Many types in the .net libraries are value types, Like System.Drawing.Point and System.Drawing.Rectangle  The C# type system can convert value-typed objects into references by boxing and convert references into value-type objects by unboxing.  But this is beyond the scope of this course...
  7. 7. Arrays  C# arrays declare the full type before the array name C++: int x[10]; C#: int[ ] x;  Since arrays are reference types; their value is null until initialized: int[ ] x; // x is null x = new int[10]; // x is now an array object  If we declare an array of reference types (e.g an array of buttons) then all elements are null until initialized: Button[ ] arr = new Button[10]; for(int i=0; i<10; i++) { arr[i] = new Button( ); }  C# has array literals: int[] arr = {1, 2, 3, 4, 5}; Person[] team = new Person[] { new Person(“Ahmed”); new Person(“Omar”), new Person(“Kamal”); };
  8. 8. Generics and List<T>  The List<T> class works like an array, but auto-expands when you add more elements to it.  This is a generic class: To make instances of this class, you must specialize it by replacing the parameter T with a real type. For example: List<int> myList; myList = new List<int>; List<Person> people = new List<Person>( );  Some useful methods and properties in List<T>:  void Add(T value)  bool Remove(T value) , void RemoveAt(int index)  void Clear( ), int IndexOf(T value)  The Count property  List<T> can be indexed with the [ ] operator like and array  List<T> has brothers and sisters in the .net libraries, like Stack<T>, Queue<T> and Dictionary<T1, T2>  Most of them live in the System.Collections.Generic namespace
  9. 9. Foreach  Foreach is used to iterate over data in a collection  Syntax: foreach(<Type> <var> in <collection>) { <code> }  Example: int[ ] arr = {1, 2, 3, 4} foreach(int x in arr) { Console.WriteLine(x); }
  10. 10. Foreach  Foreach does not work only on arrays, it works on many, many collection classes:  It works on List<T>  It works on combo box and list box items  It works on all of .nets data structures  It works in many other places...  When creating your own data structures, you can make them support foreach
  11. 11. The System.Drawing.Graphics class  Graphics is a class that represents something with drawing capabilities (screen, window, printer....)  Some useful methods in this class:  g.DrawLine(Pen p, Point pt1, Point pt2);  g.DrawLine(Pen p, int x1, int y1, int x2, int y2);  g.DrawRectangle(Pen p, Rectangle r);  g.DrawRectangle(Pen p, int x, int y, int width, int height);  g.DrawEllipse(Pen p, Rectangle r);  g.DrawEllipse(Pen p, int x, int y, int width, int height);
  12. 12. Pen?  A pen is an object used by Graphics to draw lines (like a real pen).  How to obtain a pen?  Use the ready-made pens like Pens.Black or Pens.Brown  Use one of the constructors for the class System.Drawing.Pen: − Pen p = new Pen(Colors.White, 12); // Color and //width − Pen p = new Pen(Color.FromArgb(234, 12, 124), 13); // Color and width also, color defined // by RGB values, each from 0 to 255
  13. 13. More Graphics functions...  g.FillRectangle(Brush b, Rectange r)  g.FillRectangle(Brush b, int x, int y, int w, int h)  g.FillEllipse(Brush b, Rectange r)  g.FillEllipse(Brush b, int x, int y, int w, int h)  To obtain a brush:  Use a ready-made brush like Brushes.Blue or Brushes.White  Use one of the classes that implement a brush interface: − Brush b = new SolidBrush(Color.Yellow); − Brush b2 = new LinearGradientBrush( new Point(0, 10),new Point(200, 10), Color.Red,Color.Blue);
  14. 14. The graphics class is rich...  Drawing images:  Bitmap b = Bitmap.FromFile("....");  g.DrawImage(b, 20, 30);  The Graphics class has many more drawing functions.  And even the functions we explained, like DrawLine( ), have many more varieties.
  15. 15. The paint event  Some actions can invalidate the drawing on a form:  Minimizing and then maximizing the window.  Moving another program in front of the window then moving it away.  Resizing the window.  …  When this happens, the form call the paint event to redraw the window contents.
  16. 16. The paint event private void Form1_Paint(object sender, PaintEventArgs e){} An object of type PaintEventArgs is given to you in the paint event, it contains two important properties:  ClipRectange : the rectangle in which to paint.  Graphics : A graphics on which to draw the window contents. You should use the provided graphics object to draw. You dont need to use the ClipRectangle but it could lead to faster drawing.
  17. 17. Obtaining a Graphics without Paint  I want to draw on the form, but not in the paint event  How do I get a graphics?  Ask the form to get one for you: void button1_Click(object sender, EventArgs e) { Graphics g = this.CreateGraphics(); g.DrawLine(Pens.Black, 0, 0, 100, 100); g.Dispose( ); }  You should not dispose the graphics in the PaintEventArgs, but you need to dispose it if you got it from CreateGraphics()
  18. 18. KeyDown and KeyUp  The KeyDown event is called when the user pushes a key on the keyboard.  The KeyUp event is called when the user releases the key.  The event, like paint( ), has a parameter with additional information. Its type is KeyEventArgs.  KeyEventArgs has many useful properties, including:  Boolean properties called "Alt", "Control" and "Shift" to tell if those keys were pressed during the event.  A "KeyCode" property. Its type is the enumeration Keys − In C#, enum values are in the form enumName.valueName
  19. 19. KeyDown and KeyUp private void Form1_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Down) { text1.Text = "The down arrow was pressed"; } if (e.Alt == true && e.KeyCode == Keys.Back) { text1.Text = "You pressed alt+backspace"; } }
  20. 20. KeyPress  The KeyPress event is called when a character is generated by the keyboard.  It has a KeyPressEventArgs parameter, this parameter has a property called KeyChar  Some differences from KeyDown/KeyUp:  KeyPress can generate several events if the key is held for a while.  KeyPress can generate only printable characters (e.g the page up key has KeyDown/KeyUp but no KeyPress).  The KeyChar parameter is of type char and not KeyCode. The KeyChar differs by keyboard state (e.g it can be a capital or small letter, or an Arabic letter...)
  21. 21. Remarks from MSDN  Key events occur in the following order: 1. KeyDown 2. KeyPress 3. KeyUp  The KeyChar property is read/write. It can be used to modify the keypress event data.  To make the form handle keyboard events before its controls, set the forms KeyPreview property to true.  After that, the system will also send the event to the control, unless you set e.Handled property in your forms event-handling method to true.
  22. 22. Sample program  The "MoveImageWithKeyboard" sample.
  23. 23. Next time...  Creating your own classes.

×