日期:2014-05-18  浏览次数:21016 次

多窗体的交互操作,急
两个窗体formA formB,现在在formA里有datagridview,点击datagridview后选择一行数据,相应的在formB里textbox等控件上显示这条信息的数据,如果在formA里直接写代码 formB formb=new formB;
formb.textbox.text=xxx;
这样写代码点击datagridview后,formB里的textbox没反应,但是在formA里加条messagebox.show(formb.textbox.text)其值又发生了变化,这是为什么,我想问的就是在本窗口编写事件对其它窗口上的控件进行操作这样能不能行,如果行该怎样做,当然可以再点击datagridview后定义变量将选择记录保存,然后在formB里加一按钮,将变量赋给textbox,但是我觉得这样不好,
另外在formA里formb.show可以打开formB窗口,为什么formb.close不能将formB关闭呢,在本窗口能不能对其它窗口的控件直接操作呢???

------解决方案--------------------
測試了,但沒有發生你的問題,你是不是用錯觸發事件?
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
Form2 form2 = new Form2();

private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
form2.textBox1.Text = dataGridView1[e.ColumnIndex, e.RowIndex].Value.ToString();
}

private void Form1_Load(object sender, EventArgs e)
{
form2.Show(this);
dataGridView1.RowCount = 3;
for (int i = 0; i < dataGridView1.ColumnCount; i++)
for (int j = 0; j < dataGridView1.RowCount; j++)
dataGridView1[i, j].Value = i + j;
}
}
}
------解决方案--------------------
绝对没问题,你是不是把赋值内容写到循环里了,因为没有给系统显示的时间,你看不到呢
------解决方案--------------------
你可以定义一个公共变量啊
public string name="";
然后在窗体2中接受
string name=form1.name;
------解决方案--------------------
1.<这样写代码点击datagridview后,formB里的textbox没反应,但是在formA里加条messagebox.show(formb.textbox.text)其值又发生了变化,这是为什么>
我估计处理的事件应该不对,你用了什么事件,有些事件取到的是原始的值。
2.不要直接调用控件,加个属性不就可以了


------解决方案--------------------
formb.textbox.text=xxx;
这句你有写在formA的事件里吗?
直接
formB formb=new formB;
formb.textbox.text=xxx;
这样是不行,formb.textbox.text的值只有第一次才能从formA传formB
------解决方案--------------------
没看太明白,如果楼主是要多窗口联动的话,使用同一个数据源就可以了
这样在B里面修改了值A里面的值也会改变
------解决方案--------------------
我统计加估计楼主的问题在于这点
 private void Form1_Load(object sender, EventArgs e)
{
form2.Show(this);
}

你是new form2().show的吧。。。。