C# 从窗口如何向主窗口传递数值!

jimeixuehua 2009-12-11 07:51:33
我定义了主窗口1,重窗口2.
要求:现在主窗口1中打开从窗口2,将从窗口2的值传递给主窗口1. 我试过构造函数法,公共类法,更改窗口控件访问限制法,都只能是主窗口向从窗口传,反向不行编译器不报错就是传不进去!
...全文
786 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
YangYun 2010-05-21
  • 打赏
  • 举报
回复
看了大家的回复,感觉都太复杂了。
我也来说两句,看看能否我的回复是楼主所期望的。
有两个FORM,FORM1和FORM2,Form1上有一txtResult控件,另有一个按钮控件btnLoadForm2,Form2中有一个txtTest控件,其值为"ResultValue",在Form1中的btnLoadForm2_click事件中添加如下代码:

Form2 frmSrv = new Form2();
if (Form2.ShowDialog() == DialogResult.OK)
{
txtResult.Text=frmSrv.Controls["txtTest"].Text;
//上一句中通过frmSrv.Controls属性就可以访问Form2中的任一控件的值,这样比较简单吧。
}

上述代码运行后,其FORM1上txtResult.text中的值就是我们所期望的"ResultValue"

jiyan1221 2009-12-12
  • 打赏
  • 举报
回复
哈哈
ci000ke 2009-12-12
  • 打赏
  • 举报
回复
学习 中
xian_wwq 2009-12-12
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 tangbin330 的回复:]
使用委托,在子窗体的构造函数中添加两个委托,一个用于调用主窗体给子窗体传值的方法,一个调用子窗体给主窗体传值的方法,这样就可以在两个窗体间进行数据的互操作了
[/Quote]
Nod,委托方法比较灵活
yingkk 2009-12-12
  • 打赏
  • 举报
回复
有个非常简单的方法。把主窗口的引用直接传递给子窗口,那样在子窗口中就可以直接对主窗口中的所有公共对象进行操作了。比如有2个窗口:MainForm和SubForm.
MainForm是这样的
public partial class MainForm: Form
{
public MainForm()
{
InitializeComponent();
SubForm subform=new SubForm(this);
}
pulbi void changeMe(string txt)
{
MessageBox.Show(txt);
}

}
SubForm这样定义类:
public partial class SubForm: Form
{
MainForm referenceToMainForm=null;
public SubForm(MainForm mainform)
{
InitializeComponent();
referenceToMainForm=mainform;
}
private void button1_Click(object sender, EventArgs e)
{
referenceToMainForm.changeMe("Hello");
}
}
jimeixuehua 2009-12-12
  • 打赏
  • 举报
回复
我还是不太懂!!需要用到高数吗?
happy664618843 2009-12-11
  • 打赏
  • 举报
回复
直接定义一个public字段在另外一个页面就可以访问
fengling2001 2009-12-11
  • 打赏
  • 举报
回复
希望在问问题之前,自己先搜索下论坛,这个问题已经被问过很多遍了,已经有很详细的解答(包括这种方法的实现代码)
mzjmicrosoft 2009-12-11
  • 打赏
  • 举报
回复
对了 你要的是Form1是TextBox


private void Button1_Click(object sender, EventArgs e)
{
Form2 myForm2 = new Form2();
myForm2.Str = "2010世界末日";
DialogResult result = myForm2.ShowDialog();
if (result == DialogResult.OK)
{
//comboBox1.Items.Add(myForm2.Str);
textBox1.Text = myForm2.Str;
}
}
Rotel-刘志东 2009-12-11
  • 打赏
  • 举报
回复
public string s 
{
get
{
return this.textBox1.Text;
}
set
{
this.textBox1.Text = value;
}
}
Form1
Form2 f2 = new Form2 ( );
f2.s= "";
f2.ShowDialog();
LoveHuiFei 2009-12-11
  • 打赏
  • 举报
回复
我是菜鸟,感觉不错,对我非常有用
mzjmicrosoft 2009-12-11
  • 打赏
  • 举报
回复
2012世界末日..... 额
mzjmicrosoft 2009-12-11
  • 打赏
  • 举报
回复
演示参考:

1、Form1窗体中一个comboBox1,一个Button

public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void Button1_Click(object sender, EventArgs e)
{
Form2 myForm2 = new Form2();
myForm2.Str = "2010世界末日";
DialogResult result = myForm2.ShowDialog();
if (result == DialogResult.OK)
{
comboBox1.Items.Add(myForm2.Str);
}
}
}


2、Form2中一个TextBox,一个Button,把这个Button的DialogResult属性设为OK

public partial class Form2 : Form
{
private string TestString;
public Form2()
{
InitializeComponent();
}
public string Str
{
get
{
return TestString;
}
set
{
TestString = value;
}
}

private void Form2_Load(object sender, EventArgs e)
{
textBox1.Text = TestString;
}

private void textBox1_TextChanged(object sender, EventArgs e)
{
this.TestString = textBox1.Text;
}

}

Jave.Lin 2009-12-11
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 mzjmicrosoft 的回复:]
Form1
Form2 f2 = new Form2 ( );

C/S 就简单了

你看都可以new了 还不能干啥...


[/Quote]

.......

非抽象类都可以new 在b/s也一样。
hitlcyu19 2009-12-11
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 tangbin330 的回复:]
C# codenamespace FormsDelegate
{/*
1. 当数据是子窗体显示的必要条件的话,通过修改子窗体的构造函数来进行传递数据;

2. 如果是不定时的访问,则可以通过委托来实现。*/publicdelegatestring GetText();publicdelegatevoid SetText(string text);publicpartialclass MainForm : Form
{
SubForm subForm;public MainForm()
{
InitializeComponent();
}///<summary>/// 用于子窗体修改主窗体的值/// 这里方法定义为私有的,但是子窗体仍然可以通过公有的委托来调用///</summary>///<param name="text">从子窗体中获取的值</param>privatevoid SetTextValue(string text)
{
tbText.Text= text;
}///<summary>///用于子窗体从主窗体中获取值///</summary>///<returns>子窗体从主窗体中获取的值</returns>privatestring GetTextValue()
{return tbText.Text;
}privatevoid btnOK_Click(object sender, EventArgs e)
{//通过委托来进行两个窗体的互操作 subForm=new SubForm(this.GetTextValue,this.SetTextValue);//通过给子窗体传递主窗体的对象或值来互操作//subForm = new SubForm(this); subForm.ShowDialog();
}
}
}
C# codenamespace FormsDelegate
{publicpartialclass SubForm : Form
{private GetText getTextValue=null;private SetText setTextValue=null;private MainForm mainForm=null;public SubForm(GetText getText,SetText setText)
{
InitializeComponent();this.getTextValue= getText;this.setTextValue= setText;this.tbText.Text=this.getTextValue();
}public SubForm(MainForm mainForm)
{
InitializeComponent();this.mainForm= mainForm;
}privatevoid btnOK_Click(object sender, EventArgs e)
{this.setTextValue(this.tbText.Text);
}
}
}
[/Quote]
5楼的就可以啦
jimeixuehua 2009-12-11
  • 打赏
  • 举报
回复
能给举个例字吗;
有在form2的文本框里输入文字,在form1的文本框里显示出来!要实时传递的那种


yudi010 2009-12-11
  • 打赏
  • 举报
回复
构造函数里面传值不行吗?
mzjmicrosoft 2009-12-11
  • 打赏
  • 举报
回复
Form1
Form2 f2 = new Form2 ( );

C/S 就简单了

你看都可以new了 还不能干啥...

Jave.Lin 2009-12-11
  • 打赏
  • 举报
回复
学习一下。
as452181826 2009-12-11
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 tangbin330 的回复:]
C# codenamespace FormsDelegate
{/*
1. 当数据是子窗体显示的必要条件的话,通过修改子窗体的构造函数来进行传递数据;

2. 如果是不定时的访问,则可以通过委托来实现。*/publicdelegatestring GetText();publicdelegatevoid SetText(string text);publicpartialclass MainForm : Form
{
SubForm subForm;public MainForm()
{
InitializeComponent();
}///<summary>/// 用于子窗体修改主窗体的值/// 这里方法定义为私有的,但是子窗体仍然可以通过公有的委托来调用///</summary>///<param name="text">从子窗体中获取的值</param>privatevoid SetTextValue(string text)
{
tbText.Text= text;
}///<summary>///用于子窗体从主窗体中获取值///</summary>///<returns>子窗体从主窗体中获取的值</returns>privatestring GetTextValue()
{return tbText.Text;
}privatevoid btnOK_Click(object sender, EventArgs e)
{//通过委托来进行两个窗体的互操作 subForm=new SubForm(this.GetTextValue,this.SetTextValue);//通过给子窗体传递主窗体的对象或值来互操作//subForm = new SubForm(this); subForm.ShowDialog();
}
}
}
C# codenamespace FormsDelegate
{publicpartialclass SubForm : Form
{private GetText getTextValue=null;private SetText setTextValue=null;private MainForm mainForm=null;public SubForm(GetText getText,SetText setText)
{
InitializeComponent();this.getTextValue= getText;this.setTextValue= setText;this.tbText.Text=this.getTextValue();
}public SubForm(MainForm mainForm)
{
InitializeComponent();this.mainForm= mainForm;
}privatevoid btnOK_Click(object sender, EventArgs e)
{this.setTextValue(this.tbText.Text);
}
}
}
[/Quote]

不错
加载更多回复(6)

110,533

社区成员

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

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

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