I have a program which opens multiple windows. its the same window but has mutliple instances with different data contained in it.
im wanting to update them individually later on in code. i figured my easiest way would be to create a variable and then set it to contain a link to a currently open window (not sure if this is actually possible though)
i have a public function in the new window that is open that can receive data when it is first created so i know that part works.
each form when it is created has a new name so I can use Application.OpenForms["formname"] to activate it, minimize it etc etc
I just need something like:
varForm = Application.OpenForms[formname]
so I can then do
varForm.PassInfo("some text to be added in to the window")
hope this makes sense to someone! If im going about this the wrong way then please let me know a better way of doing it. I am still pretty new to c# programming and still have a whole lot to learn.
thanks
Loading
theLizardPosted Jul 5, 2012, 1:25 AM
You may need to install the component in your C# Tool Box to be able to load the files.
This will demonstrate how to do what you want without declaring any vars for any particular form.
It will work with static forms or even dynamically created forms.
This is the main form code in the demo app
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace FormControlAccess
{
//--------------------------------------------------------------------------------------------------
// 3 things are needed to access the controls on another form without specifically declaring vars to do so
// 1. Need to know the form Name
// 2. Need to know the control Name
// 3. What to send to the control
// 1. Text
// 2. An object of any declared type eg, Items for a combo box, List Box
//--------------------------------------------------------------------------------------------------
public partial class frmMain : Form
{
internal frmChild form1;
internal frmChild1 form2;
internal frmChild[] newForms = new frmChild[0];
public frmMain()
{
InitializeComponent();
form1 = new frmChild();
form2 = new frmChild1();
lbForms.Items.Add("...");
}
//--------------------------------------------------------------------------------------------------
private void Form1_Load(object sender, EventArgs e)
{
form1.Show();
form2.Show();
this.Top = 10;
this.Left = (Screen.PrimaryScreen.Bounds.Width - this.Width) / 2;
form1.Top = (this.Top + this.Height) + 10;
form2.Left = form1.Left + form1.Width;
form2.Top = form1.Top;
form1.BringToFront();
//Set the form that will receive the control values
agent.SendToForm = form1;
lbForms.Items.AddRange(agent.GetFormNames());
}
//--------------------------------------------------------------------------------------------------
private void button1_Click(object sender, EventArgs e)
{
agent.Ctrl(agent.SendToForm, "textBox1").Text = te.Text;
}
//--------------------------------------------------------------------------------------------------
private void button3_Click(object sender, EventArgs e)
{
agent.Ctrl(agent.SendToForm, "textBox2").Text = te.Text;
}
//--------------------------------------------------------------------------------------------------
private void button2_Click(object sender, EventArgs e)
{
//send to Text property of the Combio Box
agent.Ctrl(agent.SendToForm, "comboBox1").Text = te.Text;
//Add Item to Combo Box
((ComboBox)agent.Ctrl(agent.SendToForm, "comboBox1")).Items.Add(te.Text);
//Declare local Combo Box pointing to Combo Box on child form
ComboBox c = ((ComboBox)agent.Ctrl(agent.SendToForm, "comboBox1"));
//Add items to combo box via it's surrogate c
c.Items.Add(te.Text);
//Set the selected index to the item just added
c.SelectedIndex = c.Items.Count - 1;
}
//--------------------------------------------------------------------------------------------------
private void button4_Click(object sender, EventArgs e)
{
//Add Item to Combo Box
((ListBox)agent.Ctrl(agent.SendToForm, "listBox1")).Items.Add(te.Text);
//Declare local Combo Box pointing to Combo Box on child form
ListBox lb = ((ListBox)agent.Ctrl(agent.SendToForm, "listBox1"));
//Add items to combo box via it's surrogate c
lb.Items.Add(te.Text + " ...");
//Set the selected index to the item just added
lb.SelectedIndex = lb.Items.Count - 1;
}
//--------------------------------------------------------------------------------------------------
private void button5_Click(object sender, EventArgs e)
{
//one way
DataGridView dgv = ((DataGridView)agent.Ctrl(agent.SendToForm, "dg"));
dgv.Rows[0].Cells[0].Value = te.Text;
//((DataGridView)agent.Ctrl(agent.SendToForm, "dg")).Rows[0].Cells[0].Value = te.Text;
//another way
((DataGridView)agent.Ctrl(agent.SendToForm, "dg")).Rows[0].Cells[1].Value = te.Text;
}
//--------------------------------------------------------------------------------------------------
private void button6_Click(object sender, EventArgs e)
{
//one way
ListView lv = ((ListView)agent.Ctrl(agent.SendToForm, "listView1"));
lv.Items.Add(te.Text + " Agent 1", 0);
//another way
((ListView)agent.Ctrl(agent.SendToForm, "listView1")).Items.Add(te.Text + " Agent 2", 1);
}
//--------------------------------------------------------------------------------------------------
private void rb1_CheckedChanged(object sender, EventArgs e)
{
agent.SendToForm = form1;
}
//--------------------------------------------------------------------------------------------------
private void rb2_CheckedChanged(object sender, EventArgs e)
{
agent.SendToForm = form2;
}
//--------------------------------------------------------------------------------------------------
private void button7_Click(object sender, EventArgs e)
{
TreeNode root = new TreeNode();
TreeNode n = new TreeNode();
TreeView tv = ((TreeView)agent.Ctrl(agent.SendToForm, "tv"));
n.Text = te.Text;
root = tv.Nodes[0];
tv.SelectedNode = root;
root.Nodes.Add(n);
root.ExpandAll();
}
//--------------------------------------------------------------------------------------------------
private void bnNew_Click(object sender, EventArgs e)
{
Array.Resize(ref newForms, newForms.Length + 1);
newForms[newForms.Length - 1] = new frmChild();
newForms[newForms.Length - 1].Name = teFormName.Text + "_" + (newForms.Length - 1).ToString();
newForms[newForms.Length - 1].Text = newForms[newForms.Length - 1].Name;
newForms[newForms.Length - 1].Show();
newForms[newForms.Length - 1].BringToFront();
agent.RefreshFormList();
lbForms.Items.Clear();
lbForms.Items.Add("...");
lbForms.Items.AddRange(agent.GetFormNames());
}
//--------------------------------------------------------------------------------------------------
private void teFormName_TextChanged(object sender, EventArgs e)
{
bnNew.Enabled = (teFormName.Text.Length > 0) ? true : false;
}
//--------------------------------------------------------------------------------------------------
private void lbForms_SelectedIndexChanged(object sender, EventArgs e)
{
if (lbForms.SelectedIndex < 4)
return;
agent.SendToForm = newForms[lbForms.SelectedIndex - 4];
}
//--------------------------------------------------------------------------------------------------
}
}
This is all the code in one of the child forms
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace FormControlAccess
{
public partial class frmChild1 : Form
{
public frmChild1()
{
InitializeComponent();
}
}
}