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#中两个窗体间的函数调用的主要内容,如果未能解决你的问题,请参考以下文章

C# 委托调用另一个窗体的函数

在C#中怎么样在一个文本框调用另一个窗口的文本框

C#如何调用JS文件中的函数

c#如何在一个窗体中调用另一个窗体的数组对象

c#如何调用MidMid()

(C#)怎样在一个窗口中调用另一个窗口中的dataGridView