黑马程序员技术交流社区

标题: 两个窗体之间如何传值??? [打印本页]

作者: 杞文明    时间: 2013-3-16 12:51
标题: 两个窗体之间如何传值???
本帖最后由 杞文明 于 2013-3-19 18:58 编辑

有两个窗体 一个是"记事本" 另一个是"SelectFrom"  
我在 "记事本"这个类中,new了 "SelectFrom"   我想获得"SelectFrom"这个
窗体中 文本框的 字符串 , 赋值给"记事本" 这个窗体的的字符变量
在不关闭 "SelectFrom"下是怎么实现啊!!
  1. private void 查找ToolStripMenuItem_Click(object sender, EventArgs e)
  2. {
  3.    SelectFrom sfrom = new SelectFrom(); //查找窗口
  4.    sfrom.Show();
  5.         //chaozhaodezifu 就是我要查找的字符,怎么样才能从 SelectFrom 的文本框txtChaozhao中获取
  6.   string chaozhaodezifu = "我的爱"; //这个是我自己赋值的 没有我要的功能

  7. int zifuPos = txtTxt.Text.IndexOf(chaozhaodezifu , txtTxt.SelectionStart);
  8. if (zifuPos != -1)
  9.    {
  10.       txtTxt.Select(zifuPos , chaozhaodezifu.Length);
  11.   }
  12. }

  13. <IMG border=0 alt="" src="http://bbs.itheima.com/forum.php?mod=image&aid=13742&size=300x300&key=3a7cfc2a12bea1d64821f77fdc987d81&nocache=yes&type=fixnone" aid="attachimg_13742">
复制代码

两个文本框传值.jpg (107.28 KB, 下载次数: 24)

两个文本框传值.jpg

作者: 3Y25    时间: 2013-3-16 12:58
等待高手出来
作者: 韦俊琳    时间: 2013-3-16 14:58
当点击form1中的button时弹出form2用这种方式
private void button1_Click(object sender, EventArgs e)
{
form2 f=new form2();
f.ShowDialog();
}
form2的单击事件:
private void button1_Click(object sender, EventArgs e)
        {  
           form1 f=new form1(你要传到form1的值);
           f.ShowDialog();
        }
然后在form1窗体中声明一个string型的变量(因为我看到你上面是要获取一个值)
string valuest;//要是全局的哟!
在form1中添加public form1(string nn):this()
{
valuest=nn;
}
private void form1_Load(object sender, EventArgs e)
{
this.txtBox1.text=valuest;
}
你尝试一下,新手最常用的就这方法。
作者: 曾玉锋    时间: 2013-3-17 21:00
本帖最后由 曾玉锋 于 2013-3-17 21:05 编辑

声明一个委托变量来传值(关于委托的定义在后面我会给出我的理解)
首先创建一个委托,创建方法和创建类相似
因为你是要在窗体中传值,所以可以创建一个带参数的委托,返回类型自定,我这里创建一个返回类型为string 的委托
//1.创建委托类型(和创建类一样,最好单独用一个文件存放)
public delegate string MyDelegate(string str);
//2.在SelectForm 类中声明一个MyDelegate类型的变量
public Mydelegate dgt;
//3.在SelectForm类的事件方法中加入以下一段代码:
if(dgt!=null)
{
   dgt(str);//str是你要在窗体间传递的值
}

//4.在记事本窗体类中创建一个返回类型为string的参数为string类型的方法
private string GetString(string str)
{
    return  str;
}

//5.在创建new SelectForm()的时候
SelectForm f=new SelectForm();
f.dgt=GetString;
f.ShowDialog();


//ok  试一下效果
作者: 曾玉锋    时间: 2013-3-17 21:28
在C#中,委托可以看做是方法签名和方法体的封装,如果方法的返回类型和委托的返回类型相同,且方法的参数列表和委托的参数列表相同,则可以把该方法赋值给委托变量,操作委托变量就相当于操作方法

例:
//1。创建委托类型
public delegate void  MyDeledate();
//2.声明MyDeledate类型的变量
public MyDelegate dgt;
//3.创建一个无参数无返回值的方法
void Fun(){....}

//4.给委托变量赋值
dgt=Fun;

//调用委托
dgt();//效果同调用Fun();

这是我对委托的简单理解
现在先熟悉一下什么是委托吧,熟悉了以后就知道委托的方便处了


作者: 马毅    时间: 2013-3-18 19:44
韦俊琳 发表于 2013-3-16 14:58
当点击form1中的button时弹出form2用这种方式
private void button1_Click(object sender, EventArgs e)
{

构造函数~~传值
作者: 许正龙    时间: 2013-3-19 17:00
只传字符串的话定义一个string的属性就可以了啊!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2