不同窗体中控件值的传递

最近搞一个小玩意 
需要窗体1的listviwe取值  拿到窗体2的listviwe去用
这事情就有点麻烦了
要直接new那个窗体 窗体里的控件那是根本连点都点不出来的


怎么做呢
问了老师和网上一些大牛得到以下解决方案
1.可以改窗体里面控件里的安全级别
.net的默认级别是私有 控件也是私有
只需要改变控件的级别为public公开级别
或者要使用某个控件事件或者方法都可以这样干

2. 就是使用事件来传递
先来一个委托 然后在取值的窗体做成一个Event事件
在自己需要传送值的地方(也许是一些控件事件)给他调用下事件
把要传的值进去 

再在使用值的窗体中 写上一个使用这个值的方法
然后在要取值的控件事件中调用取值窗体里的那个传值的Event事件
这个事件里传入我们这个使用值的方法

OK 你就可以随意的调用取值窗体里的值了
注意 委托里的参数 限定了你取值 和使用值里面方法和事件的参数类型

 

以下为实例:


//这里我先做一个委托 委托的参数是listviweitem 类型的 listviwe的一个项
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;

namespace WindowsApplication1
{
    public delegate void SendAddMusicForBoxHandler(ListViewItem lvi);

}

 


//在取值窗体中 我用这个委托做一个SendAddMusicForBoxEvent事件出来  
//当“添加ToolStripMenuItem”这个右键菜单选项单击的时候
//触发事件 并取值listviweitem lvi  这个和我们上面事件需要的参数一致
//我们可以直接将它传入事件中
using System.Windows.Forms;
using WindowsApplication1.Modle;
using System.Data.SqlClient;
using WindowsApplication1.DAL;
using WindowsApplication1.BLL;

namespace WindowsApplication1
{
    public partial class frmMain : Form
    {
        public event SendAddMusicForBoxHandler SendAddMusicForBoxEvent;
        ListViewItem lvi=new ListViewItem();
        private void 添加ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            lvi = listViewMusic.SelectedItems[0];
            if (SendAddMusicForBoxEvent != null)
            {
                SendAddMusicForBoxEvent(lvi);
            }
        }
    }

 


第三步就简单了 调用那个窗体 再使用事件
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsApplication1
{
    public partial class PlayMusicBox : Form
    {
        public PlayMusicBox()
        {
            InitializeComponent();
        }

        private void PlayMusicBox_Load(object sender, EventArgs e)
        {  
            //窗体加载后 new一个取值界面  当取值界面那个右键菜单单击后触发我们做的那个
            //SendAddMusicForBoxHandler事件 那个事件中已经有了我们传的值
           //这边在用这个事件 调用下面做的使用值的那个方法
            frmMain f = new frmMain();
            f.Show();
            f.SendAddMusicForBoxEvent +=new SendAddMusicForBoxHandler(FilllistView);
           
        }
        //这里写一个如何使用取到的值的方法
         我这里把取到的listviwe打乱 重新放入当前窗体里的listviwe
        public void FilllistView(ListViewItem lvi)
        {
            ListViewItem l = new ListViewItem();
            l.Text=lvi.Text;
            for (int i = 1; i < lvi.SubItems.Count; i++)
            {
               
                l.SubItems.Add(lvi.SubItems[i].Text);
            }
                listView1.Items.Add(l);
        }
}
}

 

有以上我们等于说变相的进行了不同窗体中 值进行传递

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值