窗体间动态传值

简介: 窗体间动态传值

一、声明公有静态变量

在一个类中声明公有静态变量,其他任何地方都可以使用。(99+处引用)

image.png

二、更改Form.designer.cs文件,将控件的访问权限改为public,供其他窗体访问

在designer.cs文件的最后,更改为公有!


public  System.Windows.Forms.TextBox textBox1;

其他窗体中直接调用


Form2 form2 = new Form2();  //new一个窗体的实例
form2.textBox1.Text = "5678";   //直接就能‘点’出来

三、利用委托

委托是一个引用类型,保存方法的指针,它指向一个方法。一旦为委托分配了方法,委托将于该方法具有完全相同的行为,当我们调用委托的时候这个方法立即被执行。


子窗体点击“加入购物车”,父窗体的购物清单中立即显示,刚刚所选的内容。

image.png


子窗体中定义委托和事件。

public delegate void TransfDelegate(ListViewItem transf);  //声明委托
public partial class FrmCustomerShop : Form
{
     public FrmCustomerShop()
     {
         InitializeComponent();
     }
    public static string productName;
    public event TransfDelegate TransfEvent1;  //声明事件
    private void btnOK_Click(object sender, EventArgs e)  //加入购物车
    {
         //将购买信息传入购物清单
         int sumCash= int.Parse(txtBuyCount.Text) * int.Parse(lbPrice.Text);//总金额=单价*数量
         ListViewItem item = new ListViewItem();
         item.Text = lbProductName .Text;//商品的名称
         item.SubItems.Add(lbPrice.Text);  //单价
         item.SubItems.Add(txtBuyCount.Text);//购买的数量
         item.SubItems.Add(sumCash.ToString());  //总金额
         TransfEvent1(item);  //传入另一个控件中
     }
 }

父窗体中注册事件,及事件处理的方法。

private void CustomerShop_Load(object sender, EventArgs e)
{    //可以写在窗体加载事件中,也可以写在其他控件的单击事件中
     FrmCustomerShop frmShop = Singleton<FrmCustomerShop>.CreateInstrance(); //单例模式
     frmShop.TransfEvent1 += frm_TransfEvent;  //注册事件
}
void frm_TransfEvent(ListViewItem item)  //事件处理方法
{
      if (!lvBillLists.Items.Contains(item))//如果List中不存在,加入其中!
      {
           lvBillLists.Items.Add(item);
      }               
}

窗体间动态传值的三种方法到这里就结束了,第一种比较简单也最常用,比较适合静态变量。第二种适用范围比较有限,技术性一般。   第三种适用范围比较广,能够联动,技术性比较强,同时也是三者中最难的。

相关文章
|
小程序 JavaScript
小程序子组件给父组件传值并且调用方法
小程序子组件给父组件传值并且调用方法
Winform窗体间传值(委托)
最近工作室为了应付 比赛 赶了一个排课系统 我负责排课的功能 写了一个星期终于赶出来了 用到了Winform窗体间传值。
966 0
|
存储 JavaScript 前端开发
页面之间传值的方法
在前端开发中我们常常需要从一个跳到另一个页面,并且将当前页面的数据传递过去,总结一下我的方法:  1 通过URL传值,不过有个缺点就是传输的值不能太大,因为浏览器对与URL的长度是有限制的。 首先定义getQueryString方法 function getQueryString(name) {  ...
1199 0
|
C#
C# 窗体间传值
Form1: 父窗体, Form2: 子窗体。 1.父窗体接收子窗体的返回值: public partial class Form1: Form { private void btnOpen_Click(object sender, EventArgs e) ...
872 0