As Griff mentioned, this should really be done by raising an event in the secondary form. Here's a working example:
using System;
using System.Drawing;
namespace ColorChanger
{
public class ColorEventArgs : EventArgs
{
private Color color;
public ColorEventArgs(int red, int green, int blue)
: this(Color.FromArgb(red, green, blue))
{ }
public ColorEventArgs(Color color)
{
this.color = color;
}
public Color Color
{
get { return color; }
}
}
}
using System;
using System.Drawing;
using System.Windows.Forms;
namespace ColorChanger
{
public partial class FormSecondary : Form
{
public event EventHandler<ColorEventArgs> ColorChanged;
private TrackBar trackBarRed;
private TrackBar trackBarGreen;
private TrackBar trackBarBlue;
public FormSecondary()
{
InitializeComponent();
trackBarRed = new TrackBar();
trackBarRed.Maximum = 255;
trackBarRed.Location = new Point(12, 12);
trackBarRed.ValueChanged += TrackBarValueChanged;
trackBarGreen = new TrackBar();
trackBarGreen.Maximum = 255;
trackBarGreen.Location = new Point(12, trackBarRed.Bottom + 12);
trackBarGreen.ValueChanged += TrackBarValueChanged;
trackBarBlue = new TrackBar();
trackBarBlue.Maximum = 255;
trackBarBlue.Location = new Point(12, trackBarGreen.Bottom + 12);
trackBarBlue.ValueChanged += TrackBarValueChanged;
SuspendLayout();
Controls.AddRange(new Control[]{
trackBarRed,
trackBarGreen,
trackBarBlue
});
ResumeLayout(true);
}
protected virtual void OnColorChanged(ColorEventArgs e)
{
EventHandler<ColorEventArgs> eh = ColorChanged;
if (eh != null)
eh(this, e);
}
private void TrackBarValueChanged(object sender, EventArgs e)
{
OnColorChanged(new ColorEventArgs(trackBarRed.Value, trackBarGreen.Value, trackBarBlue.Value));
}
}
}
using System.Windows.Forms;
namespace ColorChanger
{
public partial class FormPrimary : Form
{
public FormPrimary()
{
InitializeComponent();
FormSecondary formSecondary = new FormSecondary();
formSecondary.ColorChanged += formSecondary_ColorChanged;
formSecondary.Show();
}
void formSecondary_ColorChanged(object sender, ColorEventArgs e)
{
BackColor = e.Color;
Text = string.Format("R={0}, G={1}, B={2}",
BackColor.R,
BackColor.G,
BackColor.B);
}
}
}
If you can't figure out what's going on from the comments then I suggest you look at my
Events Made Simple[
^] article or some of the other excellent articles/blogs that are around on this subject.