} 
   5.2 Клас Ostsilograf 
   Даний клас є основним в даній системі. Даний код описує головний компонент Ostsilograf, який відображає інтерфейс віртуального осцилографа і реалізує взаємодію між іншими компонентами. Тут створюються сигналу заново або відтворюються з файлу. Містяться так само функції для зміни положення сигналу, його амплітуди і фази. Тут реалізований інтерфейс екрану (Настройки екрана), де можна встановити підсвічування екрану, яскравість і чіткість сигналу. Сигнал можна заземлити (для цього реалізовані відповідні функції). Сигнал можна зберегти і прочитати з файлу, для цього створені відповідні функції, що реалізують сериализацию і десеріалізацію. Даний компонент є двоканальним віртуальним осцилографом. Тому можна вимірювати як один, так і два сигнали, порівнювати їх амплітуди і фази. 
  using System;System.Collections.Generic;System.ComponentModel;System.Drawing;System.Data;System.Linq;System.Text;System.Windows.Forms;System.IO;System.Runtime.Serialization.Formatters.Binary;Mycomponent
  {partial class Ostsilograf: UserControl 
  {Col;//Колір крівойh=0;//товщина крівойx;//зсув 
  int y; 
  int y1;y2;So1;So2;On;//включениеKanal1;//каналыKanal2;pen;//пероzemlya1;//заземлениеzemlya2;ColSetka;[] V_del1, V_del2, Dlit;//масиви для зберігання параметрів розгортки і 
  длітельностіOstsilograf () 
  {= Color.FromArgb (255,0,200,0);//колір зображення 
  x=0;//зсув=3;=0;=y;=y;=false;//ключено/вимкнено 
  Kanal1=false;=false;=new Pen (Col, h);=false;=false; () ;. button3.Enabled=true; _del1=Zapolnenie_Razvertki ();//параметри розгортки канала1_del2=Zapolnenie_Razvertki ();//параметри розгортки канала2=Zapolnenie_Dlitelnosti ();//параметри длітельності.Items.AddRange (V_del1) ;. Items.AddRange (V_del2) ;. Items.AddRange (Dlit); 
 } 
 //першого сігналvoid button1_Click (object sender, EventArgs e) 
  {. Visible=true;=new SignalObject (setka1.SetkaSize) ;. Ok=true; (So2!=null) 
  {. Ok=false; 
 } 
 } void setka1_Paint (object sender, PaintEventArgs e) 
  {(On == false) {return; }//осцилограф виключен.Graphics.TranslateTransform (- 100 + x, 0);//переміщення 
 //промінь (Kanal1 == false amp; amp; Kanal2 == false amp; amp; zemlya1 == false amp; amp; zemlya2 == false) 
  {. Graphics.DrawLine (pen, -this.Width, y, this.Width, y); 
 } 
 //промінь першого каналу ((Kanal1 == false) amp; amp; zemlya1 == true) 
  {. Graphics.DrawLine (pen, -this.Width, y1, this.Width, y1); 
 } 
 //промінь другого каналу ((Kanal2 == false) amp; amp; zemlya2 == true) 
  {. Graphics.DrawLine (pen, -this.Width, y2, this.Width, y2); 
 } 
 //зображення першого сигналу 
  if (Kanal1 == true amp; amp; So1!=null) 
  {(So1, e); 
				
				
				
				
			 } 
 //зображення другого сигналу 
  if (Kanal2 == true amp; amp; So2!=null) 
  {(So2, e); 
 } 
 } 
 //функція зображення сигналів 
  private void Izobrajenie (SignalObject So, PaintEventArgs e) 
  {(So.Garm == 1)//сигнал гармонійний 
  {. Graphics.DrawLines (pen, So.L.ToArray ()); 
 } if (So.Garm == 0)//сигнал імпульсний 
  {(int i=0; i lt; So.L.Count - 1; i=i + 2) 
  {. Graphics.DrawLine (pen, So.L [i], So.L [i + 1]); 
 } 
 } 
 } 
 //виклик генератора сігналовvoid signal1_VisibleChanged (object sender, EventArgs e) 
  {(signal1.Visible == true) 
  {; 
 } (So1!=null amp; amp; So1.Ok == true) 
  {(y1, So1); 
 } (So2!=null amp; amp; So2.Ok == true) 
  {(y2, So2); 
 } (); 
 } 
 //другому сігналvoid button2_Click (object sender, EventArgs e) 
  {. Visible=true;=new SignalObject (setka1.SetkaSize) ;. Ok=true; (So1!=null) 
  {. Ok=false; 
 } 
 } 
 //Переміщення по горизонталі 
 ...