Presentation is loading. Please wait.

Presentation is loading. Please wait.

User Interface Programming in C#: Basics and Events Chris North CS 3724: HCI.

Similar presentations


Presentation on theme: "User Interface Programming in C#: Basics and Events Chris North CS 3724: HCI."— Presentation transcript:

1 User Interface Programming in C#: Basics and Events Chris North CS 3724: HCI

2 GUI Development: Goals 1.General GUI programming concepts GUI components, layouts Event-based programming Graphics Direct Manipulation, Animation MVC architectures Data-driven UIs 2.C#,.NET Windows Forms Events, delegates GDI+ Threads ADO.net Goal: learn other languages quickly, same concepts VB, Xwin, Java 49, …

3 C# Background C# = VB + Java(best of both!) Basic statements identical to C++, Java Object-oriented only! main( ) is inside a class No global variables “interfaces” No pointers (object references only), safe No delete: automatic garbage collection Error Handling, exceptions (try, catch) GUI: Windows Forms Libraries: Data structs, databases, … Component-based: (“assembly”) reflection No.h files Visual Studio.NET: CLR, multi-language, web, XML, services, …

4 C# Materials MS Visual Studio.Net (2002, 2003) MSDN (integrates with VS) VS Dynamic Help Books MS Visual C#.NET, MS Press –C# language –Window Forms, GDI+ MSDN online

5 Getting Started Visual Studio New Application Drag-n-drop GUI builder Code editor Properties Methods Events

6 Visual Studio.Net controls designer Properties, events

7 Components API Properties Like member fields Get, set E.g. Button1.Text = “Press Me” Methods Like member functions Tell component to do something E.g. Button1.Show( ) Events Like callback functions Receive notifications from component E.g. Button1.Click(e)

8 Anatomy of a C# WinApp namespace MyWindowsApplication1 { public class MyForm1 : System.Windows.Forms.Form { // inherit from Form base class public MyForm1( ) // constructor, calls InitializeComponent( ) private void InitializeComponent( ) // VS auto-generated GUI code protected override void Dispose( bool disposing ) // standard method to clean up resources static void Main( ) { // App starts here! Application.Run(new MyForm1( )); // create a new MyForm1 and run the main event loop }

9 Adding GUI Controls public class MyForm1 : System.Windows.Forms.Form { private System.Windows.Forms.Button button1; …// member variables for each GUI control private void InitializeComponent( ) // VS auto-generated GUI code // create GUI controls: this.button1 = new System.Windows.Forms.Button( ); // set properties of GUI controls: this.button1.Text = "button1"; // add controls to their parent or Form: this.Controls.AddRange( new System.Windows.Forms.Control[] {this.button1} ); }

10 GUI Tree Structure Panel Button Form Label GUIInternal structure containers Panel Button Form Label

11 GUI Layout Management Fixed position: X,Y location W,H size Anchor: Maintain distance to: Top, Left, Bottom, Right Dock: Fill space in: Top, Left, Bottom, Right, Fill AutoScroll: Scrolling control panels Z-Order: Front to back order

12 Layout Combinations Button TextBox

13 Layout Combinations Form Panel Button JTextArea Dock: top Dock: Fill x,y

14 Java: Layout Managers Left to right, Top to bottom c n s ew FlowLayoutGridLayout BorderLayout none, programmer sets x,y,w,h null One at a time CardLayout GridBagLayout JButton

15 Events

16 Typical command line program Non-interactive Linear execution program: main() { code; }

17 Interactive command line program User input commands Non-linear execution Unpredictable order Much idle time program: main() { decl data storage; initialization code; loop { get command; switch(command) { command1: code; command2: code; … }

18 Typical GUI program GUI program: main() { decl data storage; initialization code; create GUI; register callbacks; main event loop; } Callback1()//button1 press {code; } Callback2()//button2 press {code; } … User input commands Non-linear execution Unpredictable order Much idle time Event callback procs

19 GUI Events Window System event loop App1 OK Cancel App2 code: OKbtn_click() { do stuff; } CancelBtn_click() { do different stuff; } App2Form_click() { do other stuff; } mouse click input device App1 event loop App2 event loop which app? which control? App2 OK Cancel

20 C# WinApp C# WinApp: Class{ decl data storage; constructor(){ initialization code; create GUI controls; register callbacks; } main(){ Run(new ) } callback1(){ do stuff; } callback2(){ do stuff; } … “delegates” = callbacks Function pointers Java: Listeners

21 Delegates 1.Register with a control to receive events Give Control a function pointer to your callback function this.button1.Click += new EventHandler(this.button1_Click); 2.Receive events from control Control will call the function pointer private void button1_Click(object sender, EventArgs e){ Button1 Button1_click() callback click 2. button1_Click( ) 1. button1.Click += button1_click( )

22 GUI Topics Components* GUI layout* Events* Graphics Manipulation Animation Databases MVC


Download ppt "User Interface Programming in C#: Basics and Events Chris North CS 3724: HCI."

Similar presentations


Ads by Google