From 7bcfee4bc43790a49226684df8b741988786331f Mon Sep 17 00:00:00 2001 From: the_fiddler Date: Sun, 4 May 2008 17:48:11 +0000 Subject: [PATCH] Renamed to InputLogger. --- Source/Examples/Tests/InputLogger.Designer.cs | 416 ++++++++++++++++++ Source/Examples/Tests/InputLogger.cs | 205 +++++++++ 2 files changed, 621 insertions(+) create mode 100644 Source/Examples/Tests/InputLogger.Designer.cs create mode 100644 Source/Examples/Tests/InputLogger.cs diff --git a/Source/Examples/Tests/InputLogger.Designer.cs b/Source/Examples/Tests/InputLogger.Designer.cs new file mode 100644 index 00000000..5b2e491b --- /dev/null +++ b/Source/Examples/Tests/InputLogger.Designer.cs @@ -0,0 +1,416 @@ +namespace Examples.Tests +{ + partial class InputLogger + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.tabControl = new System.Windows.Forms.TabControl(); + this.Keyboard = new System.Windows.Forms.TabPage(); + this.label4 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.listBox4 = new System.Windows.Forms.ListBox(); + this.listBox3 = new System.Windows.Forms.ListBox(); + this.listBox2 = new System.Windows.Forms.ListBox(); + this.listBox1 = new System.Windows.Forms.ListBox(); + this.Mouse = new System.Windows.Forms.TabPage(); + this.WindowY = new System.Windows.Forms.Label(); + this.WindowX = new System.Windows.Forms.Label(); + this.MouseYWindow = new System.Windows.Forms.TextBox(); + this.MouseXWindow = new System.Windows.Forms.TextBox(); + this.MouseWheelDelta = new System.Windows.Forms.TextBox(); + this.WheelDelta = new System.Windows.Forms.Label(); + this.MouseWheelText = new System.Windows.Forms.TextBox(); + this.MouseWheelLabel = new System.Windows.Forms.Label(); + this.MouseDeltaY = new System.Windows.Forms.Label(); + this.MouseDeltaX = new System.Windows.Forms.Label(); + this.MouseY = new System.Windows.Forms.Label(); + this.MouseX = new System.Windows.Forms.Label(); + this.MouseDYText = new System.Windows.Forms.TextBox(); + this.MouseDXText = new System.Windows.Forms.TextBox(); + this.MouseYText = new System.Windows.Forms.TextBox(); + this.MouseXText = new System.Windows.Forms.TextBox(); + this.MouseButtonsBox = new System.Windows.Forms.ListBox(); + this.ChooseMouse = new System.Windows.Forms.ComboBox(); + this.HID = new System.Windows.Forms.TabPage(); + this.PollTimer = new System.Windows.Forms.Timer(this.components); + this.tabControl.SuspendLayout(); + this.Keyboard.SuspendLayout(); + this.Mouse.SuspendLayout(); + this.SuspendLayout(); + // + // tabControl + // + this.tabControl.Controls.Add(this.Keyboard); + this.tabControl.Controls.Add(this.Mouse); + this.tabControl.Controls.Add(this.HID); + this.tabControl.Dock = System.Windows.Forms.DockStyle.Fill; + this.tabControl.Location = new System.Drawing.Point(0, 0); + this.tabControl.Name = "tabControl"; + this.tabControl.SelectedIndex = 0; + this.tabControl.Size = new System.Drawing.Size(432, 378); + this.tabControl.TabIndex = 0; + // + // Keyboard + // + this.Keyboard.BackColor = System.Drawing.SystemColors.ControlLight; + this.Keyboard.Controls.Add(this.label4); + this.Keyboard.Controls.Add(this.label3); + this.Keyboard.Controls.Add(this.label2); + this.Keyboard.Controls.Add(this.label1); + this.Keyboard.Controls.Add(this.listBox4); + this.Keyboard.Controls.Add(this.listBox3); + this.Keyboard.Controls.Add(this.listBox2); + this.Keyboard.Controls.Add(this.listBox1); + this.Keyboard.Location = new System.Drawing.Point(4, 22); + this.Keyboard.Name = "Keyboard"; + this.Keyboard.Padding = new System.Windows.Forms.Padding(3); + this.Keyboard.Size = new System.Drawing.Size(424, 352); + this.Keyboard.TabIndex = 0; + this.Keyboard.Text = "Keyboard"; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(207, 180); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(61, 13); + this.label4.TabIndex = 7; + this.label4.Text = "Keyboard 4"; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(6, 180); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(61, 13); + this.label3.TabIndex = 6; + this.label3.Text = "Keyboard 3"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(207, 3); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(61, 13); + this.label2.TabIndex = 5; + this.label2.Text = "Keyboard 2"; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(8, 3); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(61, 13); + this.label1.TabIndex = 4; + this.label1.Text = "Keyboard 1"; + // + // listBox4 + // + this.listBox4.FormattingEnabled = true; + this.listBox4.Location = new System.Drawing.Point(210, 197); + this.listBox4.Name = "listBox4"; + this.listBox4.Size = new System.Drawing.Size(206, 147); + this.listBox4.TabIndex = 3; + // + // listBox3 + // + this.listBox3.FormattingEnabled = true; + this.listBox3.Location = new System.Drawing.Point(9, 197); + this.listBox3.Name = "listBox3"; + this.listBox3.Size = new System.Drawing.Size(195, 147); + this.listBox3.TabIndex = 2; + // + // listBox2 + // + this.listBox2.FormattingEnabled = true; + this.listBox2.Location = new System.Drawing.Point(210, 20); + this.listBox2.Name = "listBox2"; + this.listBox2.Size = new System.Drawing.Size(206, 147); + this.listBox2.TabIndex = 1; + // + // listBox1 + // + this.listBox1.FormattingEnabled = true; + this.listBox1.Location = new System.Drawing.Point(9, 20); + this.listBox1.Name = "listBox1"; + this.listBox1.Size = new System.Drawing.Size(195, 147); + this.listBox1.TabIndex = 0; + // + // Mouse + // + this.Mouse.BackColor = System.Drawing.SystemColors.ControlLight; + this.Mouse.Controls.Add(this.WindowY); + this.Mouse.Controls.Add(this.WindowX); + this.Mouse.Controls.Add(this.MouseYWindow); + this.Mouse.Controls.Add(this.MouseXWindow); + this.Mouse.Controls.Add(this.MouseWheelDelta); + this.Mouse.Controls.Add(this.WheelDelta); + this.Mouse.Controls.Add(this.MouseWheelText); + this.Mouse.Controls.Add(this.MouseWheelLabel); + this.Mouse.Controls.Add(this.MouseDeltaY); + this.Mouse.Controls.Add(this.MouseDeltaX); + this.Mouse.Controls.Add(this.MouseY); + this.Mouse.Controls.Add(this.MouseX); + this.Mouse.Controls.Add(this.MouseDYText); + this.Mouse.Controls.Add(this.MouseDXText); + this.Mouse.Controls.Add(this.MouseYText); + this.Mouse.Controls.Add(this.MouseXText); + this.Mouse.Controls.Add(this.MouseButtonsBox); + this.Mouse.Controls.Add(this.ChooseMouse); + this.Mouse.Location = new System.Drawing.Point(4, 22); + this.Mouse.Name = "Mouse"; + this.Mouse.Padding = new System.Windows.Forms.Padding(3); + this.Mouse.Size = new System.Drawing.Size(424, 352); + this.Mouse.TabIndex = 1; + this.Mouse.Text = "Mouse"; + // + // WindowY + // + this.WindowY.AutoSize = true; + this.WindowY.Location = new System.Drawing.Point(4, 239); + this.WindowY.Name = "WindowY"; + this.WindowY.Size = new System.Drawing.Size(59, 13); + this.WindowY.TabIndex = 17; + this.WindowY.Text = "Window Y:"; + // + // WindowX + // + this.WindowX.AutoSize = true; + this.WindowX.Location = new System.Drawing.Point(4, 212); + this.WindowX.Name = "WindowX"; + this.WindowX.Size = new System.Drawing.Size(59, 13); + this.WindowX.TabIndex = 16; + this.WindowX.Text = "Window X:"; + // + // MouseYWindow + // + this.MouseYWindow.Location = new System.Drawing.Point(80, 232); + this.MouseYWindow.Name = "MouseYWindow"; + this.MouseYWindow.ReadOnly = true; + this.MouseYWindow.Size = new System.Drawing.Size(73, 20); + this.MouseYWindow.TabIndex = 15; + // + // MouseXWindow + // + this.MouseXWindow.Location = new System.Drawing.Point(80, 205); + this.MouseXWindow.Name = "MouseXWindow"; + this.MouseXWindow.ReadOnly = true; + this.MouseXWindow.Size = new System.Drawing.Size(73, 20); + this.MouseXWindow.TabIndex = 14; + // + // MouseWheelDelta + // + this.MouseWheelDelta.Location = new System.Drawing.Point(80, 178); + this.MouseWheelDelta.Name = "MouseWheelDelta"; + this.MouseWheelDelta.ReadOnly = true; + this.MouseWheelDelta.Size = new System.Drawing.Size(73, 20); + this.MouseWheelDelta.TabIndex = 13; + // + // WheelDelta + // + this.WheelDelta.AutoSize = true; + this.WheelDelta.Location = new System.Drawing.Point(4, 185); + this.WheelDelta.Name = "WheelDelta"; + this.WheelDelta.Size = new System.Drawing.Size(69, 13); + this.WheelDelta.TabIndex = 12; + this.WheelDelta.Text = "Wheel Delta:"; + // + // MouseWheelText + // + this.MouseWheelText.Location = new System.Drawing.Point(80, 152); + this.MouseWheelText.Name = "MouseWheelText"; + this.MouseWheelText.ReadOnly = true; + this.MouseWheelText.Size = new System.Drawing.Size(73, 20); + this.MouseWheelText.TabIndex = 11; + // + // MouseWheelLabel + // + this.MouseWheelLabel.AutoSize = true; + this.MouseWheelLabel.Location = new System.Drawing.Point(4, 159); + this.MouseWheelLabel.Name = "MouseWheelLabel"; + this.MouseWheelLabel.Size = new System.Drawing.Size(41, 13); + this.MouseWheelLabel.TabIndex = 10; + this.MouseWheelLabel.Text = "Wheel:"; + // + // MouseDeltaY + // + this.MouseDeltaY.AutoSize = true; + this.MouseDeltaY.Location = new System.Drawing.Point(4, 132); + this.MouseDeltaY.Name = "MouseDeltaY"; + this.MouseDeltaY.Size = new System.Drawing.Size(45, 13); + this.MouseDeltaY.TabIndex = 9; + this.MouseDeltaY.Text = "Delta Y:"; + // + // MouseDeltaX + // + this.MouseDeltaX.AutoSize = true; + this.MouseDeltaX.Location = new System.Drawing.Point(4, 105); + this.MouseDeltaX.Name = "MouseDeltaX"; + this.MouseDeltaX.Size = new System.Drawing.Size(45, 13); + this.MouseDeltaX.TabIndex = 8; + this.MouseDeltaX.Text = "Delta X:"; + // + // MouseY + // + this.MouseY.AutoSize = true; + this.MouseY.Location = new System.Drawing.Point(4, 78); + this.MouseY.Name = "MouseY"; + this.MouseY.Size = new System.Drawing.Size(57, 13); + this.MouseY.TabIndex = 7; + this.MouseY.Text = "Position Y:"; + // + // MouseX + // + this.MouseX.AutoSize = true; + this.MouseX.Location = new System.Drawing.Point(4, 51); + this.MouseX.Name = "MouseX"; + this.MouseX.Size = new System.Drawing.Size(57, 13); + this.MouseX.TabIndex = 6; + this.MouseX.Text = "Position X:"; + // + // MouseDYText + // + this.MouseDYText.Location = new System.Drawing.Point(80, 125); + this.MouseDYText.Name = "MouseDYText"; + this.MouseDYText.ReadOnly = true; + this.MouseDYText.Size = new System.Drawing.Size(73, 20); + this.MouseDYText.TabIndex = 5; + // + // MouseDXText + // + this.MouseDXText.Location = new System.Drawing.Point(80, 98); + this.MouseDXText.Name = "MouseDXText"; + this.MouseDXText.ReadOnly = true; + this.MouseDXText.Size = new System.Drawing.Size(73, 20); + this.MouseDXText.TabIndex = 4; + // + // MouseYText + // + this.MouseYText.Location = new System.Drawing.Point(80, 71); + this.MouseYText.Name = "MouseYText"; + this.MouseYText.ReadOnly = true; + this.MouseYText.Size = new System.Drawing.Size(73, 20); + this.MouseYText.TabIndex = 3; + // + // MouseXText + // + this.MouseXText.Location = new System.Drawing.Point(80, 44); + this.MouseXText.Name = "MouseXText"; + this.MouseXText.ReadOnly = true; + this.MouseXText.Size = new System.Drawing.Size(73, 20); + this.MouseXText.TabIndex = 2; + // + // MouseButtonsBox + // + this.MouseButtonsBox.FormattingEnabled = true; + this.MouseButtonsBox.Location = new System.Drawing.Point(256, 44); + this.MouseButtonsBox.Name = "MouseButtonsBox"; + this.MouseButtonsBox.Size = new System.Drawing.Size(160, 134); + this.MouseButtonsBox.TabIndex = 1; + // + // ChooseMouse + // + this.ChooseMouse.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.ChooseMouse.FormattingEnabled = true; + this.ChooseMouse.Location = new System.Drawing.Point(7, 7); + this.ChooseMouse.Name = "ChooseMouse"; + this.ChooseMouse.Size = new System.Drawing.Size(409, 21); + this.ChooseMouse.TabIndex = 0; + this.ChooseMouse.SelectedIndexChanged += new System.EventHandler(this.ChooseMouse_SelectedIndexChanged); + // + // HID + // + this.HID.Location = new System.Drawing.Point(4, 22); + this.HID.Name = "HID"; + this.HID.Padding = new System.Windows.Forms.Padding(3); + this.HID.Size = new System.Drawing.Size(424, 352); + this.HID.TabIndex = 2; + this.HID.Text = "HID"; + this.HID.UseVisualStyleBackColor = true; + // + // PollTimer + // + this.PollTimer.Interval = 10; + // + // S04_Input_Logger + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(432, 378); + this.Controls.Add(this.tabControl); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.Name = "S04_Input_Logger"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "S04: Input Logger"; + this.tabControl.ResumeLayout(false); + this.Keyboard.ResumeLayout(false); + this.Keyboard.PerformLayout(); + this.Mouse.ResumeLayout(false); + this.Mouse.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.TabControl tabControl; + private System.Windows.Forms.TabPage Keyboard; + private System.Windows.Forms.TabPage Mouse; + private System.Windows.Forms.TabPage HID; + private System.Windows.Forms.ListBox listBox4; + private System.Windows.Forms.ListBox listBox3; + private System.Windows.Forms.ListBox listBox2; + private System.Windows.Forms.ListBox listBox1; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.ComboBox ChooseMouse; + private System.Windows.Forms.ListBox MouseButtonsBox; + private System.Windows.Forms.Label MouseDeltaY; + private System.Windows.Forms.Label MouseDeltaX; + private System.Windows.Forms.Label MouseY; + private System.Windows.Forms.Label MouseX; + private System.Windows.Forms.TextBox MouseDYText; + private System.Windows.Forms.TextBox MouseDXText; + private System.Windows.Forms.TextBox MouseYText; + private System.Windows.Forms.TextBox MouseXText; + private System.Windows.Forms.TextBox MouseWheelText; + private System.Windows.Forms.Label MouseWheelLabel; + private System.Windows.Forms.TextBox MouseWheelDelta; + private System.Windows.Forms.Label WheelDelta; + private System.Windows.Forms.Timer PollTimer; + private System.Windows.Forms.TextBox MouseXWindow; + private System.Windows.Forms.Label WindowY; + private System.Windows.Forms.Label WindowX; + private System.Windows.Forms.TextBox MouseYWindow; + + } +} \ No newline at end of file diff --git a/Source/Examples/Tests/InputLogger.cs b/Source/Examples/Tests/InputLogger.cs new file mode 100644 index 00000000..c6d81961 --- /dev/null +++ b/Source/Examples/Tests/InputLogger.cs @@ -0,0 +1,205 @@ +#region --- License --- +/* Copyright (c) 2006, 2007 Stefanos Apostolopoulos + * See license.txt for license info + */ +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +using OpenTK; +using OpenTK.Platform; +using OpenTK.Input; +using System.Diagnostics; +using System.Threading; + +using OpenTK.Graphics; +using OpenTK.Graphics.OpenGL; + +namespace Examples.Tests +{ + [Example("Input Logger", ExampleCategory.Test)] + public partial class InputLogger : Form + { + Thread thread; + GameWindow hidden; + bool start; + Dictionary keyboardListBoxes = new Dictionary(4); + + public InputLogger() + { + InitializeComponent(); + } + + void LaunchGameWindow() + { + hidden = new GameWindow(320, 240, GraphicsMode.Default, "OpenTK | Hidden input window"); + hidden.Load += hidden_Load; + hidden.Unload += hidden_Unload; + hidden.RenderFrame += new OpenTK.RenderFrameEvent(hidden_RenderFrame); + hidden.Run(31.0, 10.0); + } + + void hidden_RenderFrame(GameWindow sender, RenderFrameEventArgs e) + { + GL.Clear(ClearBufferMask.ColorBufferBit); + sender.SwapBuffers(); + Thread.Sleep(10); + } + + void hidden_Load(GameWindow sender, EventArgs e) + { + start = true; + GL.ClearColor(Color.Black); + } + + void hidden_Unload(GameWindow sender, EventArgs e) + { + this.BeginInvoke(on_hidden_unload, sender, e, this); + } + + delegate void CloseTrigger(GameWindow sender, EventArgs e, Form f); + CloseTrigger on_hidden_unload = delegate(GameWindow sender, EventArgs e, Form f) { f.Close(); }; + + protected override void OnLoad(EventArgs e) + { + base.OnLoad(e); + + thread = new Thread(LaunchGameWindow); + thread.Start(); + + while (!start) + Thread.Sleep(100); + + //WindowInfo info = new WindowInfo(this); + + keyboardListBoxes.Add(hidden.Keyboard.DeviceID, listBox1); + + // Add available mice to the mouse input logger. + ChooseMouse.Items.Add(String.Format("Mouse {0} ({1})", 0, hidden.Mouse.Description)); + hidden.Mouse.ButtonDown += LogMouseButtonDown; + hidden.Mouse.ButtonUp += LogMouseButtonUp; + + hidden.Keyboard.KeyDown += LogKeyDown; + hidden.Keyboard.KeyUp += LogKeyUp; + + //Application.Idle += new EventHandler(UpdateDevices); + hidden.UpdateFrame += hidden_UpdateFrame; + } + + protected override void OnClosing(CancelEventArgs e) + { + base.OnClosing(e); + + hidden.ExitAsync(); + + while (hidden.Exists) + Thread.Sleep(100); + + e.Cancel = false; + } + + delegate void ControlLogMouseKey(GameWindow input_window, InputLogger control, MouseDevice sender, MouseButton button); + ControlLogMouseKey ControlLogMouseKeyDown = + delegate(GameWindow input_window, InputLogger control, MouseDevice sender, MouseButton button) + { + if (sender.DeviceID == input_window.Mouse.DeviceID) + { + control.MouseButtonsBox.Items.Add(button); + System.Diagnostics.Debug.Print("Button down: {0}", button); + } + }; + ControlLogMouseKey ControlLogMouseKeyUp = + delegate(GameWindow input_window, InputLogger control, MouseDevice sender, MouseButton button) + { + if (sender.DeviceID == input_window.Mouse.DeviceID) + { + control.MouseButtonsBox.Items.Remove(button); + System.Diagnostics.Debug.Print("Button up: {0}", button); + } + }; + + delegate void ControlLogMousePosition(GameWindow input_window, InputLogger control); + ControlLogMousePosition ControlLogMousePositionChanges = + delegate(GameWindow input_window, InputLogger control) + { + // Update mouse coordinates. + control.MouseXText.Text = input_window.Mouse.X.ToString(); + control.MouseYText.Text = input_window.Mouse.Y.ToString(); + control.MouseDXText.Text = input_window.Mouse.XDelta.ToString(); + control.MouseDYText.Text = input_window.Mouse.YDelta.ToString(); + control.MouseWheelText.Text = input_window.Mouse.Wheel.ToString(); + //System.Drawing.Point p = input_window.PointToClient(input_window.Mouse.Position); + //System.Drawing.Point p = control.PointToClient(input_window.Mouse.Position); + //control.MouseXWindow.Text = p.X.ToString(); + //control.MouseYWindow.Text = p.Y.ToString(); + control.MouseWheelDelta.Text = input_window.Mouse.WheelDelta.ToString(); + }; + + delegate void ControlLogKeyboard(GameWindow input_window, InputLogger control, OpenTK.Input.KeyboardDevice sender, Key key); + ControlLogKeyboard ControlLogKeyboardDown = + delegate(GameWindow input_window, InputLogger control, KeyboardDevice sender, Key key) + { + control.keyboardListBoxes[sender.DeviceID].Items.Add(key); + }; + ControlLogKeyboard ControlLogKeyboardUp = + delegate(GameWindow input_window, InputLogger control, KeyboardDevice sender, Key key) + { + control.keyboardListBoxes[sender.DeviceID].Items.Remove(key); + }; + + void hidden_UpdateFrame(object sender, UpdateFrameEventArgs e) + { + this.BeginInvoke(ControlLogMousePositionChanges, hidden, this); + } + + void LogMouseButtonDown(MouseDevice sender, MouseButton button) + { + this.BeginInvoke(ControlLogMouseKeyDown, hidden, this, sender, button); + } + + void LogMouseButtonUp(MouseDevice sender, MouseButton button) + { + this.BeginInvoke(ControlLogMouseKeyUp, hidden, this, sender, button); + } + + void LogKeyDown(KeyboardDevice sender, Key key) + { + this.BeginInvoke(ControlLogKeyboardDown, hidden, this, sender, key); + } + + void LogKeyUp(KeyboardDevice sender, Key key) + { + this.BeginInvoke(ControlLogKeyboardUp, hidden, this, sender, key); + } + + private void ChooseMouse_SelectedIndexChanged(object sender, EventArgs e) + { + MouseButtonsBox.Items.Clear(); + } + + #region public static void Main() + + /// + /// Entry point of this example. + /// + [STAThread] + public static void Main() + { + using (InputLogger example = new InputLogger()) + { + // Get the title and category of this example using reflection. + ExampleAttribute info = ((ExampleAttribute)example.GetType().GetCustomAttributes(false)[0]); + example.Text = String.Format("OpenTK | {0} {1}: {2}", info.Category, info.Difficulty, info.Title); + example.ShowDialog(); + } + } + + #endregion + } +}