首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 怎样才能修改另一个窗口的Button或是Label的Text [已结贴,结贴人:szzbbb07]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-11 13:29:25 楼主
    怎样才能修改另一个窗口的Button或是Label的Text。
    20  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-11 15:45:191楼 得分:0
    搂主应该把问题说清楚一点,是在同一个进程了,还是另外一个进程的?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-11 15:57:422楼 得分:0
    同一个的,不同的窗体。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-11 17:53:403楼 得分:20
    类似这样,可以线程安全。
    控件一般是私有的,如果你不原意把控件公开出来,自己作些改动。

    C# code
    public partial class Form1 : Form { delegate void SetTextDelegate(Control control, string text); public void SetText(Control control, string text) { if (this.InvokeRequired) { Invoke(new SetTextDelegate(SetText), new object[] { control, text }); } else { control.Text = text; } } } public partial class Form2 : Form { void button1_Click(object sender, EventArgs e) { form1.SetText(form1.textbox1, "hello"); form1.SetText(form1.button1, "world"); } }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-11 18:43:214楼 得分:0
    从其它线程调用本线程的控件:
    使用事件和代理
    private void SetText(string text)
    {

    if (this.textBox1.InvokeRequired) //判断 从其它线程来调用控件是否必须使用Invoke()
                                      //因为调用控件的线程不是创建控件的线程。
    {
    SetTextCallback d = new SetTextCallback(SetText);
    this.Invoke(d, new object[] { text }); //在创建控件的线程上使用一个代理
    //以便在创建控件的线程上执行一个函数
    }
    else
    {
    this.textBox1.Text = text;
    }
    }

    如果楼住还是不很明白的话看看这个
    http://hi.baidu.com/ustbylb/blog/item/2b7cc51338558c22dd5401b4.html
    里面介绍的很详细

    我先在只会用代理和事件来解决这个问题,不知道还有什么更好的办法没有。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-14 23:11:085楼 得分:0
    上面的方法差不多,我试了。
    在新开的窗口可以有用,不过这种情况把组件设置成public就可以改了。
    对于已经存在的窗口没办法改。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-15 07:33:526楼 得分:0
    UP!!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-15 08:20:517楼 得分:0
    引用 4 楼 sleepingsprite 的回复:
    从其它线程调用本线程的控件:
    使用事件和代理
    private void SetText(string text)
    {

    if (this.textBox1.InvokeRequired) //判断 从其它线程来调用控件是否必须使用Invoke()
                                      //因为调用控件的线程不是创建控件的线程。
    {
    SetTextCallback d = new SetTextCallback(SetText);
    this.Invoke(d, new object[] { text }); //在创建控件的线程上使用一个代理
    //以便在创建控…

    这种办法其实就是一种不错的办法。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-15 08:35:538楼 得分:0
    把要修改的窗体先new个实例,然后传给控制的窗体,在控制窗体写个方法接收这个实例,最后这个实例.label.text就出来了呵呵
    组件设置成public

    比较笼统的办法嘎嘎
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-15 08:40:589楼 得分:0
    比较直白一点说,窗体代码也是一个类,你把类中的变量设置为public类型的,在别的地方就可以访问到!就像你使用普通的数据处理 类是一样的。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-15 09:13:0610楼 得分:0
    直接把控件的modifiers属性设置为PUBLIC好了!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-15 14:14:2511楼 得分:0
    比如要修改Form2窗体里面的一个Label1的Text属性

    只要在Form2里面添加这个公共方法
    public void SetLabelText(string str)
            {
                this.label1.Text = str;
            }

    然后在Form1里面调用就可以了
    Form2 f = new Form2();
    f.Show();
    f.SetLabelText("ant text value here");

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-15 19:14:3012楼 得分:0
    不要把控件设置为public,这样当别外一个线种用的窗口时会有很多问题
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-15 19:14:3213楼 得分:0
    不要把控件设置为public,这样当别外一个线种用的窗口时会有很多问题
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-15 19:14:3514楼 得分:0
    不要把控件设置为public,这样当别外一个线种用的窗口时会有很多问题
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-15 19:31:5415楼 得分:0

    gomoku 写的那个办法就很好
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    世纪乐知(北京)网络技术有限公司 版权所有 京 ICP 证 020026 号
    Copyright © 2000-2007, CSDN.NET, All Rights Reserved