zoukankan      html  css  js  c++  java
  • 窗体间的互操作

    问题:点击form2中的按钮来改变form1中Label的text值

    一.事件委托
     
    思路:
           在form1中定义一个委托,并写出一个方法(ChangeText),这个方法用来改变Label的值,然后把这个方法放到委托当中,再在form2中定义一个

    form1中委托的事件,并在form2中对应的操作中触发该事件.

    误区:
           如果在form2中重新创建一个form1的对象来调用ChangeText这个方法的话是无法完成的,因为新创建的这个对象与Application.Run(new

    form1());已经启动起来的form1窗体已经不是同一个对象,所以即使调用了方法也不是改变原来form1中的Label的Text值,而是另外一个对象的Label的

    Text值.

    form1部分代码:

    public delegate void MyDelegate(object sender,string msg);
    public Form1()
    {
       InitializeComponent();
       MyDelegate my 
    = new MyDelegate(ChangeValue);
       Form2.MyEvent 
    += my;//订阅事件
    }
    //改变Label的值
    public void ChangeValue(object sender,string msg)
    {
       
    this.label1.Text = msg;
    }

    form2代码:

    public static event Form1.MyDelegate MyEvent;

    private void button1_Click(object sender, EventArgs e)
    {
       
    if (MyEvent != null)

          {
              MyEvent(
    this,"第一种方法");//触发事件
           }
    }

    二.遍历窗体,根据Name找到form1窗体

    在form1的form1.designer.cs中把Label1的访问类型改为Public,这样才能在form2中访问

    private void button2_Click(object sender, EventArgs e)
    {
       
    foreach (Form f in Application.OpenForms)//遍历应用程序已经打开的窗体
          {
            
    if (f.Name == "Form1")
              {
                 Form1 f1 
    = f as Form1;
                 f1.label1.Text 
    = "第二种方法";
              }
          }
    }

    三.
    在form1中打开form2的show()方法中添加一个参数
             
                        Form2 form2=new Form2();
                        form2.Show(this);

    在form2中的对应事件中:
                               
                        Form1 f1 = (Form1)this.Owner;
                        f1.label1.Text="第三种方法";


     

  • 相关阅读:
    敏捷软件开发之何为敏捷开发
    在DataGridView控件中实现冻结列分界线
    VS2010 Extension实践(2)
    如何使用MOQ进行单元测试
    把WPF Dialog转成WinForm Dialog需要注意的问题续
    浅析Web数据存储Cookie、UserData、SessionStorage、WebSqlDatabase
    VS2010 Extension实践(3)——实现自定义配置
    Url Rewrite 再说Url 重写
    团购网火了?
    从Component对象到CodeDom——舞动你的Code系列(1)
  • 原文地址:https://www.cnblogs.com/wangshuai/p/1655855.html
Copyright © 2011-2022 走看看