如何调用其它窗体内控件属性?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何调用其它窗体内控件属性?相关的知识,希望对你有一定的参考价值。

参考技术A 方法一:将其它窗口上的控件作成属性
方法二:
Form1
f
=
new
Form1();
f.Show();
foreach
(Control
control
in
f.Controls)

ListBox
lb
=
control
as
ListBox;
if(lb!=null)
lb.Items.Add("test");

//f.Refresh();
参考技术B 如果可以访问到那个窗体,你可以把那个窗体里的要访问的控件定义为
public
修饰(更为合理的方法是定义一个公开只读属性,返回那个控件),然后就可以在拥有那个窗体的类内访问到这个控件了。
例如:
public
class
A:Form

public
TextBox
A_control=new
TextBox();

public
class
B:Form

public
B()

A
a=new
A();
string
A_control_text=A.
A_control.Text;


这样就可以获得窗体A里面的控件A_control的属性Text了。

C# 调用函数后窗体假死失去响应

我想用线程处理函数,但是函数有返回值和参数。我用的异步调用也会出现假死现象
public delegate int FuncHandle(int data1, int data2);
int Foo(int data1, int data2)
int i = 0;for (int x = 0; x < 50000; x++ )for (int y = 0; y < 50000; y++) i+=y; return i;
private void Button_Click(object sender, RoutedEventArgs e)

FuncHandle fh = new FuncHandle(this.Foo);
IAsyncResult ar = fh.BeginInvoke(1, 3, null, fh);
int re = fh.EndInvoke(ar);
MessageBox.Show(re.ToString());

参考技术A IAsyncResult ar = fh.BeginInvoke(1, 3, null, fh);
int re = fh.EndInvoke(ar);

这个还是相当于同步在执行啊。
直接新起一个线程多好啊?

Thread thread = new Thread(new ThreadStart(Foo));]
thread.IsBackground = true;
thread.Start();

然后在Foo的最后加上
this.BeginInvoke(new MethodInvoker(delegate()

MessageBox.Show(结果);
));追问

需要接受一个返回值和给两个参数

追答

那可以利用 ParameterizedThreadStart 这个委托, 可以接受参数。

参考技术B 异步回调假死?
您在异步过程中请使用:
Yourcontrol.BeginInvoke(即可)
记住千万不要用THIS.BEGININVOKE.
否则UI卡死追问

我这样也会失去响应

追答

如果使用BEGININVOKE失去响应的话.
我就知道您是怎么写的了.

您是在BEGININVOKE的函数内编写访问数据库的对吧..
只要是BEGININVOKE其实就已经同步UI了..
把BEGININVOKE函数内的内容删除的只剩下给窗体赋值即可..其他任何访问数据库,WESERVICE等等的代码全部不要

本回答被提问者和网友采纳
参考技术C 怎么写的呢?

以上是关于如何调用其它窗体内控件属性?的主要内容,如果未能解决你的问题,请参考以下文章

改变控件在窗体中的上下位置应修改控件的啥属性 这些属性在编程里面会用到

C#中如何在一个窗体中调用另一个窗体控件中的数据?

C#如何让控件一直在窗体中间显示

C#里怎么在一个窗体里调用另一个窗体的控件

WinForm窗体界面设计

C#winform 主窗体上的用户控件怎样调用主窗体的一个方法!