方寸心间

一路走,十年不回头

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  问题如下:
   选择Form1中要修改的值,点按钮呼出Form2,在Form2中修改其值.
   实现的方法有很多.我觉得使用委托是最简单的.
   
   代码如下:
Form1
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

namespace Test
{
    
//定义一个委托
    public delegate void UpdataList(string str);
    
/// <summary>
    
/// Form1 的摘要说明。
    
/// </summary>

    public class Form1 : System.Windows.Forms.Form
    
{
        
private System.Windows.Forms.ListBox listBox1;
        
private System.Windows.Forms.Button button1;
        
/// <summary>
        
/// 必需的设计器变量。
        
/// </summary>

        private System.ComponentModel.Container components = null;

        
public Form1()
        
{
            
//
            
// Windows 窗体设计器支持所必需的
            
//
            InitializeComponent();

            
//
            
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
            
//
        }


        
/// <summary>
        
/// 清理所有正在使用的资源。
        
/// </summary>

        protected override void Dispose( bool disposing )
        
{
            
if( disposing )
            
{
                
if (components != null
                
{
                    components.Dispose();
                }

            }

            
base.Dispose( disposing );
        }


        
Windows 窗体设计器生成的代码

        
/// <summary>
        
/// 应用程序的主入口点。
        
/// </summary>

        [STAThread]
        
static void Main() 
        
{
            Application.Run(
new Form1());
        }


        
/// <summary>
        
/// 弹出form2窗体
        
/// </summary>
        
/// <param name="sender"></param>
        
/// <param name="e"></param>

        private void button1_Click(object sender, System.EventArgs e)
        
{
            Form2 f2 
= new Form2();
            f2.Str
=this.listBox1.SelectedItem.ToString();
            
//为窗体2中的委托ul关联方法
            f2.ul = new UpdataList(Updata);
            f2.Show();
        }


        
//此方法修改选中项的值
        void Updata(string s)
        
{
            
this.listBox1.Items[this.listBox1.SelectedIndex] = s;
        }

    }

}
   首先在Form1外面声明一个public delegate void UpdataList(string str) 委托名UpdataList 它所能关联的方法是没有返回值void能接受的参数为string类型.
   然后button1按钮的Click事件将实例化Form2并将Form2中委托ul关联方法Updata(string s),此方法对ListBox中选择的值进行修改.

Form2:
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;

namespace Test
{
    
/// <summary>
    
/// Form2 的摘要说明。
    
/// </summary>

    public class Form2 : System.Windows.Forms.Form
    
{
        
private string str;
        
public string Str
        
{
            
get
            
{
                
return str;
            }

            
set
            
{
                str 
= value;
            }

        }

        
public UpdataList ul;

        
private System.Windows.Forms.TextBox textBox1;
        
private System.Windows.Forms.Button button1;
        
private System.Windows.Forms.Button button2;
        
/// <summary>
        
/// 必需的设计器变量。
        
/// </summary>

        private System.ComponentModel.Container components = null;

        
public Form2()
        
{
            
//
            
// Windows 窗体设计器支持所必需的
            
//
            InitializeComponent();

            
//
            
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
            
//
        }


        
/// <summary>
        
/// 清理所有正在使用的资源。
        
/// </summary>

        protected override void Dispose( bool disposing )
        
{
            
if( disposing )
            
{
                
if(components != null)
                
{
                    components.Dispose();
                }

            }

            
base.Dispose( disposing );
        }


        
Windows 窗体设计器生成的代码

        
/// <summary>
        
/// 窗体加载获得值
        
/// </summary>
        
/// <param name="sender"></param>
        
/// <param name="e"></param>

        private void Form2_Load(object sender, System.EventArgs e)
        
{
            
this.textBox1.Text = this.Str;
        }


        
/// <summary>
        
/// 修改
        
/// </summary>
        
/// <param name="sender"></param>
        
/// <param name="e"></param>

        private void button1_Click(object sender, System.EventArgs e)
        
{
            ul(
this.textBox1.Text.ToString());
        }

    }

}


   以上为所有实现代码.通过此例可以联想到许多地方都能用委托来简单实现.

源码:
  /Files/wllyy189/Test.rar
posted on 2007-03-25 17:16  方寸心间  阅读(247)  评论(0编辑  收藏  举报