关闭子窗口的同时将值提交给父窗口并在父窗口中显示

szyjp 2009-12-26 11:33:54

如上图,
请问在关闭选择出版社的窗口时,将选中的出版社ID和名称填到父窗口:入库单中的出版社文本框中?
...全文
634 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
linekery 2009-12-27
  • 打赏
  • 举报
回复
用ShowDialog() 多好。。
这不是没事找罪受么
wuyq11 2009-12-26
  • 打赏
  • 举报
回复
winform间传值
通过公共静态类进行传值;
通过绑定事件进行传值;
使用Attribute
public partial class Form1 : Form
{
private void button1_Click(object sender, EventArgs e)
{
Form2 frm2 = new Form2();
frm2.Show(this);
}
}

public partial class Form2 : Form
{
private void button1_Click(object sender, EventArgs e)
{
Form1 frm1 = (Form1)this.Owner;
((TextBox)frm1.Controls["textBox1"]).Text = this.textBox2.Text;
this.Close();
}
}

mngzilin 2009-12-26
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 szyjp 的回复:]
不行啊大哥:
(this.Owner.Controls["txtPudid"] as TextBox).Text = this.txtPudid.Text;
(this.Owner.Controls["txtPudName"] as TextBox).Text = this.txtPudName.Text;

运行报错:
        未将对象引用设置到对象的实例。
          使用new 关键字创建对象实例.


[/Quote]

如果你的txtPudid和txtPudName放在其他容器中,如panel等,可能会找不到。
下面这样试试:
(this.Owner.Controls["容器Id"].Controls["txtPudid"] as TextBox).Text
顺便把你的代码贴些出来。要form1的
szyjp 2009-12-26
  • 打赏
  • 举报
回复
不行啊大哥:
(this.Owner.Controls["txtPudid"] as TextBox).Text = this.txtPudid.Text;
(this.Owner.Controls["txtPudName"] as TextBox).Text = this.txtPudName.Text;

运行报错:
未将对象引用设置到对象的实例。
使用new 关键字创建对象实例.

linekery 2009-12-26
  • 打赏
  • 举报
回复
使用 ShowDialog()
if(selectForm.ShowDialog() == DialogResult.OK)
{
mailForm.出版ID = selectForm.出版ID;
}


selectForm 就是你的 弹出窗口 这段代码是在你的主窗口的 事件里执行的。

在弹出窗口的确定事件中 给DialogResult 赋值 为DialogResult.OK 窗口就会自动退出
从而转到上面的 if 语句中
szyjp 2009-12-26
  • 打赏
  • 举报
回复
好的,谢谢,我试一下看看
mngzilin 2009-12-26
  • 打赏
  • 举报
回复
方法较多,我4和6楼写法错误,不好意思,看8楼和9楼就可以了
mngzilin 2009-12-26
  • 打赏
  • 举报
回复
你还可以这样:
Form1为父窗口,fm2为子窗口:
private void button1_Click(object sender, EventArgs e)
{
Form2 fm2 = new Form2();
fm2.Owner = this;//设置它的拥有者
fm2.Show();
}

在form2中如下:
(this.Owner.Controls["checkBox1"] as CheckBox).Checked = true;
mngzilin 2009-12-26
  • 打赏
  • 举报
回复
父窗口为fm1,里面有button1和checkbox1,按钮事件如下:
private void button1_Click(object sender, EventArgs e)
{
Form2 fm2 = new Form2(this);//这里传递this
fm2.Show();
}

子窗口为fm2,里面有button1,事件如下:
public partial class Form2 : Form
{
Form1 fm1;
public Form2(Form1 fm1)
{
InitializeComponent();
this.fm1 = fm1; }

private void button1_Click(object sender, EventArgs e)
{
(fm1.Controls["checkBox1"] as CheckBox).Checked = true;
}
}
szyjp 2009-12-26
  • 打赏
  • 举报
回复
请问6楼:
你的form2是父窗口还是子窗口?
你的这一段应该是写在子窗口中吗?
mngzilin 2009-12-26
  • 打赏
  • 举报
回复
(form2.Parent as form1).TextBox1.text="safasfsaf"
szyjp 2009-12-26
  • 打赏
  • 举报
回复
不好意思,初学不久,4楼的代码是什么意思?能详细说明吗?
mngzilin 2009-12-26
  • 打赏
  • 举报
回复
form1 fm=form2.Parent as form1
fm.XXXX=
szyjp 2009-12-26
  • 打赏
  • 举报
回复
我已按2楼的做了:
private void butOK_Click(object sender, EventArgs e)
{
if (this.txtPudid.Text!= "" && this.txtPudName.Text != "")
{

Frm_Insert.pudid = this.txtPudid.Text;
Frm_Insert.pudName = this.txtPudName.Text;
this.Close();

}
else
{
MessageBox.Show("请先选择出版社!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Stop);
}
}

现在的问题是:
我已将值传给父窗口的静态变量了,但如何在父窗口中:出版社的文本框中显示呢?
liangzhl 2009-12-26
  • 打赏
  • 举报
回复
在父窗口中声明一个公共变量public string cbs;
public string id;
在子窗体中frm1 fm=new frm1();
fm.cbs=frm2.出版社的名称;
fm.id=frm2.出版社的编号;
liherun 2009-12-26
  • 打赏
  • 举报
回复
重新去数据库查询吧
szyjp 2009-12-26
  • 打赏
  • 举报
回复
非常感谢 mngzilin !
你的方法OK,搞掂了!
再次感谢各位!
结贴!
tianliang1 2009-12-26
  • 打赏
  • 举报
回复
又是窗体间通信的问题。。。

110,560

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧