当前位置:编程学习 > C#/ASP.NET >>

关于C#,从另一窗体中读取文本框的内容

在主窗体(Form1)中,有文本框textBox1
我添加了代码:  public string getname()
                                   {
                                         return textBox1.Text;
                                     }
 在另外一个窗体的代码区中,定义了变量string name;,
  添加语句为: Form1   f =new  Form1();
                                name=f.getname();
  请问这样哪里出错了呢?  --------------------编程问答-------------------- 还有,错了,应该怎么做呢? 给指点指点。 --------------------编程问答-------------------- public string textboxname
  {
  get {return textBox1.Text;}
  }
form2中通过
Form1 f获取属性值 --------------------编程问答-------------------- 不需要这么麻烦,直接用委托就能得到父窗体的空间的值
在Form2窗体中加以下代码
Form1 fr1 = (Form1)this.Owner;
string name = fr1.textbox1.text; --------------------编程问答-------------------- 看看我的博客
http://blog.csdn.net/chazikai24/archive/2010/09/01/5855254.aspx --------------------编程问答-------------------- 试了下, 怎么有错误呢
get { return textBox1.Text;} 
编译器说错误在 “{”,应输入 “;”
这是怎么回事呢? --------------------编程问答--------------------
引用 5 楼 cjq477607220 的回复:
试了下, 怎么有错误呢
get { return textBox1.Text;} 
编译器说错误在 “{”,应输入 “;”
这是怎么回事呢?

注意,上面public 后面没有括号的 --------------------编程问答-------------------- 你要在Form1的构造函数里对属性 进行赋值

public partial class Form1 : Form
    {
        private string textboxname;

        public string Textboxname
        {
            get { return textboxname; }
            set { textboxname = value; }
        }

        
        public Form1()
        {
            InitializeComponent();
            this.Textboxname = textBox1.Text;
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

这样你在Form1 f=new form1()的时候,它是属性才会有值 --------------------编程问答-------------------- 在FORM1定义一个静态变量 然后生成GET SET
将textBox1.Text传给这个变量
然后在另一个窗体直接用这个变量就可以了 --------------------编程问答-------------------- 如果一定要用静态的变量,这样可以简单点
 public partial class Form1 : Form
    {
        public static string textboxname;
        
        public Form1()
        {
            InitializeComponent();
           
        }

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

        private void button1_Click(object sender, EventArgs e)
        {
            Form2 f = new Form2();
            f.Show();
        }
    }

在form2中直接可以调用
string text = Form1.textboxname; --------------------编程问答-------------------- 可将Form1实例传入Form2中 --------------------编程问答-------------------- 几位说的我有试了,现在都没有出现错误了。
不过,我也不知怎的,就是没能获取到;
像用9楼的,
我在第二窗体的代码区中,
 textBox2.Text=textboxname;
 但运行后,文本框textBox2中内容是空的,
这是怎么回事呢? --------------------编程问答--------------------
引用 11 楼 cjq477607220 的回复:
几位说的我有试了,现在都没有出现错误了。
不过,我也不知怎的,就是没能获取到;
像用9楼的,
我在第二窗体的代码区中,
textBox2.Text=textboxname;
 但运行后,文本框textBox2中内容是空的,
这是怎么回事呢?

用的肯定不会有问题,3楼的,委托传值,很方便 --------------------编程问答--------------------
引用 3 楼 chazikai24 的回复:
不需要这么麻烦,直接用委托就能得到父窗体的空间的值
在Form2窗体中加以下代码
Form1 fr1 = (Form1)this.Owner;
string name = fr1.textbox1.text;

出现异常,未将对象引用设置到对象的实例。
--------------------编程问答--------------------
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 WindowsFormsApplication5
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        public string name;
        private void button1_Click(object sender, EventArgs e)
        {
            name = textBox1.Text;
            Form2 fr2 = new Form2();
            fr2.ShowDialog(this);
        }
    }
}

using System;//窗体2
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication5
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Form1 fr1 = (Form1)this.Owner;
            MessageBox.Show(fr1.name);
        }
    }
}
--------------------编程问答-------------------- 楼主再把你改过的代码贴下出来,看看哪里有问题 --------------------编程问答-------------------- textBox1属性改成PUBLIC  
public string textboxname
  {
  get {return textBox1.Text;}
  }


 FORM2构造函数 public Form2(Form1 f1)
{
   ......
   name = f1.textboxname;
} --------------------编程问答-------------------- textBox1属性改成PUBLIC  
public string textboxname
  {
  get {return textBox1.Text;}
  }


 FORM2构造函数 public Form2(Form1 f1)
{
   ......
   name = f1.textboxname;
} --------------------编程问答-------------------- textBox1属性改成PUBLIC  
public string textboxname
  {
  get {return textBox1.Text;}
  }


 FORM2构造函数 public Form2(Form1 f1)
{
   ......
   name = f1.textboxname;
} --------------------编程问答--------------------
引用 3 楼 chazikai24 的回复:
不需要这么麻烦,直接用委托就能得到父窗体的空间的值
在Form2窗体中加以下代码
Form1 fr1 = (Form1)this.Owner;
string name = fr1.textbox1.text;

+1  

这个textbox1 访问权限应设为public --------------------编程问答-------------------- 搞定了,谢谢大家啊…… --------------------编程问答-------------------- 恭喜LZ,请对大家的服务打分!非常满意,请按A,满意请按B,不满意请按C! --------------------编程问答-------------------- 在Form1里加上
Form2.Owner=this;
Form2.Show();

然后再在Form2窗体中加以下代码
Form1 fr1 = (Form1)this.Owner;
string name = fr1.textbox1.text;


--------------------编程问答-------------------- 怎么结不了帖呢?
按结帖按钮后,只出来一个空白页面 --------------------编程问答-------------------- 其实窗体传值有很多种方式,你除了可以用属性传值,还可以用构造函数,静态变量等。
http://blog.csdn.net/deepwishly/archive/2010/01/18/5209590.aspx --------------------编程问答-------------------- 支持了... --------------------编程问答-------------------- --------------------编程问答--------------------
引用 22 楼 zhangming64432 的回复:
在Form1里加上
Form2.Owner=this;
Form2.Show();

然后再在Form2窗体中加以下代码
Form1 fr1 = (Form1)this.Owner;
string name = fr1.textbox1.text;

支持 --------------------编程问答-------------------- public string textboxname
  {
  get {return textBox1.Text;}
  } --------------------编程问答-------------------- 谢谢 。。。 
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,