C#中两个窗体间的函数调用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#中两个窗体间的函数调用相关的知识,希望对你有一定的参考价值。
程序中有两个窗口,窗口1中有listview1控件,操作正常,在窗口1中调用窗口2,然后窗口2若干操作后调用窗口1的某个函数如NetPlay(),返回窗口1的NetPlay函数,进入正常(NetPlay中的messagebox能弹出)但是我在操作listview1(如listview1.Items.Clear())的时候无法操作,对程序没有任何的反应,但程序没有报错 也就是说,我进入了从窗口1进入窗口2后,在窗口2中调用窗口1的某个函数,该函数其它一切正常,只是在调用窗口1里面的控件的时候没反应(但也没报错),这是什么原因 相关代码 MiniMedia是窗口1的名字 NetMedia窗口2 MiniMedia某函数() NetMedia Dlg = new NetMedia(); Dlg.ShowDialog(this); 窗口2中 MiniMedia MiniMediaClass = new MiniMedia(); NetMedia某函数() MiniMediaClass.NetPlay();//此函数是窗口1中的 窗口1中的 NetPlay() MessageBox.Show("哈哈");//正常显示 listView1.Items.Clear();//不起作用,不报错,但是在其他函数中使用正常
参考技术A 你已经跨线程调用控件了,当然无作用也不报错。在Form1中调用当然可以,但在Form2中(另一线程)调用就无效。delegate
ListViewItemClearDelegate();
ListViewItemClearDelegate
_dListViewItemClear;
public
void
Form1_Load()
_dListViewItemClear=new
ListViewItemClearDelegate(ListViewItemClear);
NetPlay()
MessageBox.Show("哈哈");//正常显示
ListViewItemClear();
public
void
ListViewItemClear()
if(listView1.InvokeRequired)
listView1.Invoke(_dListViewItemClea);
else
listView1.Items.Clear();
解决思路就这样,代码没有调试过,只是凭印象写的,你试着编译一下。
在C#中怎么样在一个文本框调用另一个窗口的文本框
你可以不要把这个问题想的太难,其实上这个问题就是窗体间的控件的相互调用。问题的实质在于这两个关联的窗体也是类,既然是类,我们可以用类的观点去解决这个问题。很好解决。比如你的窗体A中有
textBox1
窗体B中有textBox2
,现在您
要在A中访问B中的textBox2,可以这么做:
1:把B中的textBox2的属性设置成Public
,(如果想静态调用可以加public
static
最好,如果不加
就在A调用B的时候在构造函数中传递参数)
2:在A中设置一个a_textBox2变量,接受来自B的textBox2里面的值,然后赋值给A中的a_textBox2
这样在A中就可以访问B中的变量了。
很简单的,仔细研究下,主要是把他们当成类理解。 参考技术A 在构造函数里面吧你的那个文本框传到另一个窗口就好了
例如:
Form2
调用Form1
窗体中的TextBox1
Form2中构造函数
TextBox
t
;
void
Form2(TextBox
t1)
This.t=t1;
//在Form2中随便调用
t.Text
就是Form1中中TextBox1的值
//Form1中实例化窗体Form2
Form2
f=new
Form2(
TextBox1
)
//
TextBox1
为Form窗体中需要调用的文本框
这样你在Form2中就可以调用TextBox1的值了
f.show(); 参考技术B 很简单,首先,把被调用控件可见性设为public,然后创建窗口是时保存窗口对象,然后,直接使用就行。本回答被提问者采纳
以上是关于C#中两个窗体间的函数调用的主要内容,如果未能解决你的问题,请参考以下文章