用c#做了两个窗体,想完成如下功能:在form2中的textbox里输入文字,相应的文字显示到form1的listbox里 10
namespace实验{publicpartialclassForm1:Form{publicForm1(){InitializeComponent();}private...
namespace 实验
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Form2 frm = new Form2(this.lstfolder);
frm.ShowDialog(this);
}
}
}
namespace 实验
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
public Form2(ListBox lst)
{
InitializeComponent();
lstfolder = lst;
}
private ListBox lstfolder;
private void btncancel_Click(object sender, EventArgs e)
{
Close();
}
private void btnok_Click(object sender, EventArgs e)
{
lstfolder.Items.Add(textBox1.Text);
}
}
}
错误提示是:“实验.Form1”并不包含“lstfolder”的定义。请问如何修改?
终于找出问题的原因了,应该把
private void button1_Click(object sender, EventArgs e)
{
Form2 frm = new Form2(this.lstfolder);
frm.ShowDialog(this);
}
改成
private void button1_Click(object sender, EventArgs e)
{
Form2 frm = new Form2(this.listbox1);//因为lstfolder根本就不是form1的属性
frm.ShowDialog(this);
}
谢谢大家的支持 展开
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Form2 frm = new Form2(this.lstfolder);
frm.ShowDialog(this);
}
}
}
namespace 实验
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
public Form2(ListBox lst)
{
InitializeComponent();
lstfolder = lst;
}
private ListBox lstfolder;
private void btncancel_Click(object sender, EventArgs e)
{
Close();
}
private void btnok_Click(object sender, EventArgs e)
{
lstfolder.Items.Add(textBox1.Text);
}
}
}
错误提示是:“实验.Form1”并不包含“lstfolder”的定义。请问如何修改?
终于找出问题的原因了,应该把
private void button1_Click(object sender, EventArgs e)
{
Form2 frm = new Form2(this.lstfolder);
frm.ShowDialog(this);
}
改成
private void button1_Click(object sender, EventArgs e)
{
Form2 frm = new Form2(this.listbox1);//因为lstfolder根本就不是form1的属性
frm.ShowDialog(this);
}
谢谢大家的支持 展开
11个回答
展开全部
如果form2是form1的子窗体,点击form2中的一个Button时进行数据交换,
那么就在form1的窗体中写一个 Button的处理函数(参数中会包含一个object sender参数),
处理函数中将 sender强制转换成 form2,剩下的操作数据交换就简单了。
(这个函数可以访问form1的数据,sender强制转换后也可以正常读出form2的数据)
在实例化form2的时候,手动将这个处理函数注册到form2的Button点击事件中。
用其他事件也可以,看你需要在什么情况下进行数据交换了。
那么就在form1的窗体中写一个 Button的处理函数(参数中会包含一个object sender参数),
处理函数中将 sender强制转换成 form2,剩下的操作数据交换就简单了。
(这个函数可以访问form1的数据,sender强制转换后也可以正常读出form2的数据)
在实例化form2的时候,手动将这个处理函数注册到form2的Button点击事件中。
用其他事件也可以,看你需要在什么情况下进行数据交换了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
出于安全考虑,原则上一个窗体不能干涉另一窗体的控件(控件安全性要求只允许其父窗体这一线程去操作),一般使用委托的办法去解决
这个问题用委托去做很简单的,建议楼主接触一下C#的委托
把你的代码修改如下:
在回答框直接手写的,没在VS测试过,不过可以参考下
namespace 实验
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void frm_dl_listBoxAddText(string str)
{
lstfolder.Items.Add(str);
}
private void button1_Click(object sender, EventArgs e)
{
Form2 frm = new Form2()//this.lstfolder);
frm.dl_listBoxAddText+=new ListboxAddText(frm_dl_listBoxAddText);
frm.ShowDialog()//this);
}
}
}
namespace 实验
{
public partial class Form2 : Form
{
public delegate void ListboxAddText(string str);
public event ListboxAddText dl_listBoxAddText;
public Form2()
{
InitializeComponent();
}
public Form2()//ListBox lst)
{
InitializeComponent();
//lstfolder = lst;
}
//private ListBox lstfolder;
private void btncancel_Click(object sender, EventArgs e)
{
Close();
}
private void btnok_Click(object sender, EventArgs e)
{
//lstfolder.Items.Add(textBox1.Text);
dl_listBoxAddText(textBox1.Text)
}
}
}
这个问题用委托去做很简单的,建议楼主接触一下C#的委托
把你的代码修改如下:
在回答框直接手写的,没在VS测试过,不过可以参考下
namespace 实验
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void frm_dl_listBoxAddText(string str)
{
lstfolder.Items.Add(str);
}
private void button1_Click(object sender, EventArgs e)
{
Form2 frm = new Form2()//this.lstfolder);
frm.dl_listBoxAddText+=new ListboxAddText(frm_dl_listBoxAddText);
frm.ShowDialog()//this);
}
}
}
namespace 实验
{
public partial class Form2 : Form
{
public delegate void ListboxAddText(string str);
public event ListboxAddText dl_listBoxAddText;
public Form2()
{
InitializeComponent();
}
public Form2()//ListBox lst)
{
InitializeComponent();
//lstfolder = lst;
}
//private ListBox lstfolder;
private void btncancel_Click(object sender, EventArgs e)
{
Close();
}
private void btnok_Click(object sender, EventArgs e)
{
//lstfolder.Items.Add(textBox1.Text);
dl_listBoxAddText(textBox1.Text)
}
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
namespace 实验
{
public partial class Form1 : Form
{
Form2 frm = new Form2(); //这里声明一下
public Form1()
{
InitializeComponent();
frm.btnok.Click += new RoutedEventHandler(btnok_Click); //这括号里的名字是自己定的
}
//下面加一段,名字和上面()中的名字一样
private void btnok_Click(object sender, EventArgs e)
{
this.ListBox.Items.Add(frm.mToForm1ListBox);
}
private void button1_Click(object sender, EventArgs e)
{
frm.ShowDialog(this);
}
}
}
namespace 实验
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
public string mToForm1ListBox; //这里设置一个public 的变量
private void btncancel_Click(object sender, EventArgs e)
{
Close();
}
private void btnok_Click(object sender, EventArgs e)
{
mToForm1ListBox = textBox1.Text; //这里把值付给这个public变量,准备传值
}
}
}
试试看这样应该可以的
{
public partial class Form1 : Form
{
Form2 frm = new Form2(); //这里声明一下
public Form1()
{
InitializeComponent();
frm.btnok.Click += new RoutedEventHandler(btnok_Click); //这括号里的名字是自己定的
}
//下面加一段,名字和上面()中的名字一样
private void btnok_Click(object sender, EventArgs e)
{
this.ListBox.Items.Add(frm.mToForm1ListBox);
}
private void button1_Click(object sender, EventArgs e)
{
frm.ShowDialog(this);
}
}
}
namespace 实验
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
public string mToForm1ListBox; //这里设置一个public 的变量
private void btncancel_Click(object sender, EventArgs e)
{
Close();
}
private void btnok_Click(object sender, EventArgs e)
{
mToForm1ListBox = textBox1.Text; //这里把值付给这个public变量,准备传值
}
}
}
试试看这样应该可以的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
哥哥!我对你的坚持与遭遇深表钦佩与同情!
不过你的代码已经改进很多了。
应该是Form1中的lstfolder属性设置问题吧。默认情况下它是Private的,所以你在Form2的实例中是无法访问到它的。把它的Modifier属性设置为Public应该就可以了。在设计窗口的属性面板中就有。此外你也可以通过代码设置。
怎么操作,你懂的!
不过你的代码已经改进很多了。
应该是Form1中的lstfolder属性设置问题吧。默认情况下它是Private的,所以你在Form2的实例中是无法访问到它的。把它的Modifier属性设置为Public应该就可以了。在设计窗口的属性面板中就有。此外你也可以通过代码设置。
怎么操作,你懂的!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
错误提示是:“实验.Form1”并不包含“lstfolder”的定义。
就是说:命名空间"实验"中的类“Form1",其成员中没有名称为"Isfolder"的东西。
哎,实在不知道咋解释了,提示都很详细了。
写 Form2 frm = new Form2(this.lstfolder); 和写Form2 frm = new Form2(this.asdfasdfasdfasdfafsfdf); 没区别,你替换了编译试试
就是说:命名空间"实验"中的类“Form1",其成员中没有名称为"Isfolder"的东西。
哎,实在不知道咋解释了,提示都很详细了。
写 Form2 frm = new Form2(this.lstfolder); 和写Form2 frm = new Form2(this.asdfasdfasdfasdfafsfdf); 没区别,你替换了编译试试
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询