I've added a textbox called tbAccel0 to a form. It shows up on the form with the correct name, but when I look at the code a red squigly line appears under tbAccel0 and an error appears in the error list saying
An object reference is required for the non-static field, method, or property
I don't understand why. Surely an object reference was added when I added the textbox to the form.
This is the only time this has happened, if a put a textbox on a new form it works normally as it should.
this is the code. I have taken a working program and added an accelerometer to it (sorry it's so long)
Expand|Select|Wrap|Line Numbers
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Drawing.Imaging;
- using System.Text;
- using System.Windows.Forms;
- using System.Threading;
- using AForge;
- using AForge.Imaging;
- using AForge.Imaging.Filters;
- using AForge.Video;
- using AForge.Video.DirectShow;
- using Phidgets;
- using Phidgets.Events;
- namespace Robot
- {
- public partial class MainForm : Form
- {
- static InterfaceKit ifKit1; //Declare an InterfaceKit object
- static InterfaceKit ifKit2; //Declare an InterfaceKit object
- static InterfaceKit ifKit3; //Declare an InterfaceKit object
- static AdvancedServo left_arm; //Declare an servo object
- static AdvancedServo right_arm; //Declare an servo object
- static AdvancedServo eyes_and_wheels; //Declare an servo object
- static Phidgets.Encoder encoder; //Declare an encoder object
- static Accelerometer accel; //Declare an accelerometer object
- //int ifKit1SN = 117172; //ifkit1 serial number
- //int ifKit2SN = 100818; //ifkit2 serial number
- //int ifKit3SN = 000000; //ifkit3 serial number
- //int left_armSN = 99333; //servo1 serial number
- //int right_armSN = 99364; //servo2 serial number
- //int eyes_and_wheelsSN = 170038 //servo3 serial number
- //int encoderSN = 000000; //encoder serial number
- //int accelSN = 159431; //servo1 serial number
- int armShoulderRotate = 0;
- int armShoulderLift = 1;
- int armElbow = 2;
- int armWristRotate = 3;
- int armWristLift = 4;
- int armGripper = 5;
- int eyeLeftYaw = 0;
- int eyeLeftLift = 2;
- int eyeRightYaw = 1;
- int eyeRightLift = 3;
- int wheelLeft = 6;
- int wheelRight = 7;
- // list of video devices
- FilterInfoCollection videoDevices;
- // form for cameras' movement
- MoveCamerasForm moveCamerasForm;
- ColorFiltering colorFilter = new ColorFiltering();
- GrayscaleBT709 grayFilter = new GrayscaleBT709();
- // use two blob counters, so the could run in parallel in two threads
- BlobCounter blobCounter1 = new BlobCounter();
- BlobCounter blobCounter2 = new BlobCounter();
- private AutoResetEvent camera1Acquired = null;
- private AutoResetEvent camera2Acquired = null;
- private Thread trackingThread = null;
- // object coordinates in both cameras
- private float x1, y1, x2, y2;
- private IntRange redRange = new IntRange(0, 255);
- private IntRange greenRange = new IntRange(0, 255);
- private IntRange blueRange = new IntRange(0, 255);
- public event EventHandler OnFilterUpdate;
- public MainForm()
- {
- InitializeComponent();
- // show device list
- try
- {
- accel = new Accelerometer(); //Initialize the Accelerometer object
- // enumerate video devices
- videoDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);
- if (videoDevices.Count == 0)
- {
- throw new Exception();
- }
- for (int i = 1, n = videoDevices.Count; i <= n; i++)
- {
- string cameraName = i + " : " + videoDevices[i - 1].Name;
- camera1Combo.Items.Add(cameraName);
- camera2Combo.Items.Add(cameraName);
- }
- // check cameras count
- if (videoDevices.Count == 1)
- {
- camera2Combo.Items.Clear();
- camera2Combo.Items.Add("Only one camera found");
- camera2Combo.SelectedIndex = 0;
- camera2Combo.Enabled = false;
- }
- else
- {
- camera2Combo.SelectedIndex = 1;
- }
- camera1Combo.SelectedIndex = 0;
- }
- catch
- {
- startButton.Enabled = false;
- camera1Combo.Items.Add("No cameras found");
- camera2Combo.Items.Add("No cameras found");
- camera1Combo.SelectedIndex = 0;
- camera2Combo.SelectedIndex = 0;
- camera1Combo.Enabled = false;
- camera2Combo.Enabled = false;
- }
- //
- colorFilter.Red = new IntRange(0, 100);
- colorFilter.Green = new IntRange(0, 200);
- colorFilter.Blue = new IntRange(150, 255);
- // configure blob counters
- blobCounter1.MinWidth = 25;
- blobCounter1.MinHeight = 25;
- blobCounter1.FilterBlobs = true;
- blobCounter1.ObjectsOrder = ObjectsOrder.Size;
- blobCounter2.MinWidth = 25;
- blobCounter2.MinHeight = 25;
- blobCounter2.FilterBlobs = true;
- blobCounter2.ObjectsOrder = ObjectsOrder.Size;
- }
- private void MainForm_Load(object sender, EventArgs e)
- {
- accel.Attach += new AttachEventHandler(accel_Attach);
- accel.AccelerationChange += new AccelerationChangeEventHandler(accel_AccelerationChange); //Hook the phidget spcific event handlers
- //accel.Error += new ErrorEventHandler(accel_Error); //Hook the phidget spcific event handlers
- accel.open(159431);
- for (int i = 0; i < accel.axes.Count; i++)
- {
- accel.axes[i].Sensitivity = 1.10;
- }
- StartCameras();
- UpdateObjectPicture(0, null);
- UpdateObjectPicture(1, null);
- startButton.Enabled = false;
- stopButton.Enabled = true;
- OnFilterUpdate += new EventHandler(OnFilterUpdate);
- }
- // On "Start" button click - start cameras
- private void startButton_Click(object sender, EventArgs e)
- {
- StartCameras();
- startButton.Enabled = false;
- stopButton.Enabled = true;
- }
- // On "Stop" button click - stop cameras
- private void stopButton_Click(object sender, EventArgs e)
- {
- StopCameras();
- startButton.Enabled = true;
- stopButton.Enabled = false;
- }
- // Start cameras
- private void StartCameras()
- {
- // create first video source
- VideoCaptureDevice videoSource1 = new VideoCaptureDevice(videoDevices[camera1Combo.SelectedIndex].MonikerString);
- videoSource1.DesiredFrameRate = 10;
- videoSourcePlayer1.VideoSource = videoSource1;
- videoSourcePlayer1.Start();
- // create second video source
- if (camera2Combo.Enabled == true)
- {
- System.Threading.Thread.Sleep(500);
- VideoCaptureDevice videoSource2 = new VideoCaptureDevice(videoDevices[camera2Combo.SelectedIndex].MonikerString);
- videoSource2.DesiredFrameRate = 10;
- videoSourcePlayer2.VideoSource = videoSource2;
- videoSourcePlayer2.Start();
- }
- camera1Acquired = new AutoResetEvent(false);
- camera2Acquired = new AutoResetEvent(false);
- // start tracking thread
- trackingThread = new Thread(new ThreadStart(TrackingThread));
- trackingThread.Start();
- }
- // Stop cameras
- private void StopCameras()
- {
- videoSourcePlayer1.SignalToStop();
- videoSourcePlayer2.SignalToStop();
- videoSourcePlayer1.WaitForStop();
- videoSourcePlayer2.WaitForStop();
- UpdateObjectPicture(0, null);
- UpdateObjectPicture(1, null);
- if (trackingThread != null)
- {
- // signal tracking thread to stop
- x1 = y1 = x2 = y2 = -1;
- camera1Acquired.Set();
- camera2Acquired.Set();
- trackingThread.Join();
- }
- }
- //// Object filter properties are updated
- private void tuneObjectFilterForm_OnFilterUpdate(object sender, EventArgs eventArgs)
- {
- colorFilter.Red = RedRange;
- colorFilter.Green = GreenRange;
- colorFilter.Blue = BlueRange;
- }
- // Turn on/off object detection
- private void objectDetectionCheck_CheckedChanged(object sender, EventArgs e)
- {
- if ((!objectDetectionCheck.Checked))
- {
- UpdateObjectPicture(0, null);
- UpdateObjectPicture(1, null);
- }
- }
- // received frame from the 1st camera
- private void videoSourcePlayer1_NewFrame(object sender, ref Bitmap image)
- {
- if (objectDetectionCheck.Checked)
- {
- Bitmap objectImage = colorFilter.Apply(image);
- // lock image for further processing
- BitmapData objectData = objectImage.LockBits(new Rectangle(0, 0, image.Width, image.Height),
- ImageLockMode.ReadOnly, image.PixelFormat);
- // grayscaling
- UnmanagedImage grayImage = grayFilter.Apply(new UnmanagedImage(objectData));
- // unlock image
- objectImage.UnlockBits(objectData);
- // locate blobs
- blobCounter1.ProcessImage(grayImage);
- Rectangle[] rects = blobCounter1.GetObjectsRectangles();
- if (rects.Length > 0)
- {
- Rectangle objectRect = rects[0];
- // draw rectangle around derected object
- Graphics g = Graphics.FromImage(image);
- using (Pen pen = new Pen(Color.FromArgb(160, 255, 160), 3))
- {
- g.DrawRectangle(pen, objectRect);
- }
- g.Dispose();
- // get object's center coordinates relative to image center
- lock (this)
- {
- x1 = (objectRect.Left + objectRect.Right - objectImage.Width) / 2;
- y1 = (objectImage.Height - (objectRect.Top + objectRect.Bottom)) / 2;
- // map to [-1, 1] range
- x1 /= (objectImage.Width / 2);
- y1 /= (objectImage.Height / 2);
- camera1Acquired.Set();
- }
- }
- UpdateObjectPicture(0, objectImage);
- }
- }
- // received frame from the 2nd camera
- private void videoSourcePlayer2_NewFrame(object sender, ref Bitmap image)
- {
- if (objectDetectionCheck.Checked)
- {
- Bitmap objectImage = colorFilter.Apply(image);
- // lock image for further processing
- BitmapData objectData = objectImage.LockBits(new Rectangle(0, 0, image.Width, image.Height),
- ImageLockMode.ReadOnly, image.PixelFormat);
- // grayscaling
- UnmanagedImage grayImage = grayFilter.Apply(new UnmanagedImage(objectData));
- // unlock image
- objectImage.UnlockBits(objectData);
- // locate blobs
- blobCounter2.ProcessImage(grayImage);
- Rectangle[] rects = blobCounter2.GetObjectsRectangles();
- if (rects.Length > 0)
- {
- Rectangle objectRect = rects[0];
- // draw rectangle around derected object
- Graphics g = Graphics.FromImage(image);
- using (Pen pen = new Pen(Color.FromArgb(160, 255, 160), 3))
- {
- g.DrawRectangle(pen, objectRect);
- }
- g.Dispose();
- // get object's center coordinates relative to image center
- lock (this)
- {
- x2 = (objectRect.Left + objectRect.Right - objectImage.Width) / 2;
- y2 = (objectImage.Height - (objectRect.Top + objectRect.Bottom)) / 2;
- // map to [-1, 1] range
- x2 /= (objectImage.Width / 2);
- y2 /= (objectImage.Height / 2);
- camera2Acquired.Set();
- }
- }
- UpdateObjectPicture(1, objectImage);
- }
- }
- // Thread to track object
- private void TrackingThread()
- {
- float targetX = 0;
- float targetY = 0;
- while (true)
- {
- camera1Acquired.WaitOne();
- camera2Acquired.WaitOne();
- lock (this)
- {
- // stop the thread if it was signaled
- if ((x1 == -1) && (y1 == -1) && (x2 == -1) && (y2 == -1))
- {
- break;
- }
- // get middle point
- targetX = (x1 + x2) / 2;
- targetY = (y1 + y2) / 2;
- }
- if (moveCamerasForm != null)
- {
- // run motors for the specified amount of degrees
- moveCamerasForm.RunMotors(2 * targetX, -2 * targetY);
- }
- }
- }
- // Update object's picture
- public void UpdateObjectPicture(int objectNumber, Bitmap picture)
- {
- System.Drawing.Image oldPicture = null;
- switch (objectNumber)
- {
- case 0:
- oldPicture = pictureBox1.Image;
- pictureBox1.Image = picture;
- break;
- case 1:
- oldPicture = pictureBox2.Image;
- pictureBox2.Image = picture;
- break;
- }
- if (oldPicture != null)
- {
- oldPicture.Dispose();
- }
- }
- // Red range
- public IntRange RedRange
- {
- get { return redRange; }
- set
- {
- redRange = value;
- redSlider.Min = value.Min;
- redSlider.Max = value.Max;
- }
- }
- // Green range
- public IntRange GreenRange
- {
- get { return greenRange; }
- set
- {
- greenRange = value;
- greenSlider.Min = value.Min;
- greenSlider.Max = value.Max;
- }
- }
- // Blue range
- public IntRange BlueRange
- {
- get { return blueRange; }
- set
- {
- blueRange = value;
- blueSlider.Min = value.Min;
- blueSlider.Max = value.Max;
- }
- }
- // Red range was changed
- private void redSlider_ValuesChanged(object sender, EventArgs e)
- {
- redRange.Min = redSlider.Min;
- redRange.Max = redSlider.Max;
- if (OnFilterUpdate != null)
- OnFilterUpdate(this, null);
- }
- // Green range was changed
- private void greenSlider_ValuesChanged(object sender, EventArgs e)
- {
- greenRange.Min = greenSlider.Min;
- greenRange.Max = greenSlider.Max;
- if (OnFilterUpdate != null)
- OnFilterUpdate(this, null);
- }
- // Blue range was changed
- private void blueSlider_ValuesChanged(object sender, EventArgs e)
- {
- blueRange.Min = blueSlider.Min;
- blueRange.Max = blueSlider.Max;
- if (OnFilterUpdate != null)
- OnFilterUpdate(this, null);
- }
- // Main form closing - stop cameras
- private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
- {
- StopCameras();
- }
- //Acceleration change event handler...Display which axis the device is accelerating in as well as the measured acceleration value
- static void accel_AccelerationChange(object sender, AccelerationChangeEventArgs e)
- {
- // Console.WriteLine("Axes {0} Acceleration {1}", e.Index, e.Acceleration);
- //if (e.Index == 0)
- //if (e.Acceleration >= 0.03)
- // Console.WriteLine("tilt left");
- //if (e.Index == 1)
- // if (e.Acceleration >= 0.03)
- // Console.WriteLine("tilt right");
- //if (e.Index == 2)
- // if (e.Acceleration >= 0.03)
- // Console.WriteLine("tilt up");
- switch (e.Index)
- {
- case 0: //1
- textBox1.Text = e.Acceleration.ToString();
- break;
- case 1:
- textBox2.Text = e.Acceleration.ToString();
- break;
- case 2: //0
- textBox3.Text = e.Acceleration.ToString();
- break;
- }
- }
- //Attach event handler...Display the serial number of the attached
- //accelerometer to the console
- static void accel_Attach(object sender, AttachEventArgs e)
- {
- Accelerometer attached = (Accelerometer)sender;
- try
- {
- attached.axes[0].Sensitivity = 0.19;
- attached.axes[1].Sensitivity = 0.19;
- if (attached.axes.Count == 3)
- attached.axes[2].Sensitivity = 0.19;
- }
- catch (PhidgetException ex)
- {
- MessageBox.Show(ex.Description);
- }
- }
- }
- }
Can somebody help?