C#窗体间的数据传值(使用ArrayList)

C#——ArrayList的常用方法 Add                ——将对象添加到ArrayList的结尾处AddRange      ——将集合中的某些元素添加到ArrayList的结尾处Insert              ——将元素插入ArrayList的指定索引处InsertRange    ——将集合中的某些元素插入ArrayList的指定索引处CopyTo           ——将ArrayList或它的一部... 阅读详情

C#窗体间通过ArrayList传值
主窗体代码

// 保存数据的ArrayList
private ArrayList listData;
        public Form1()
        {
            InitializeComponent();
            // 初始化ArrayList
            listData = new ArrayList();
            listData.Add(".Net");
            listData.Add("Java");
            listData.Add("XML");
            listData.Add("WebService");
            // 绑定数据
            listBox1.DataSource = listData;
        }
        // 打开子窗口
        private void buttonOpen_Click(object sender, EventArgs e)
        {
            // ArrayList 作为参数传递
            Form2 frm2 = new Form2(listData);
            frm2.ShowDialog();
            // 在子窗口修改ArrayList 后重新绑定数据
        listBox1.DataSource = null;
            // listBox1.Item.Clear();  提示"设置DataSource属性后无法修改项集合"错误。
            listBox1.DataSource = listData;
        }


关于"设置DataSource属性后无法修改项集合"错误,参考http://www.ideaext.com/read.php/312.htm
子窗口代码

ArrayList listData;
        public Form2(ArrayList listData)
        {
            InitializeComponent(); // 注意,在修改默认构造方法的时候需要保留此项,否则子窗口的控件无法实例话,提示"未将对象引用设置到对象的实例"错误。我刚刚就犯了这错误,呵呵
            this.listData = listData;
            foreach (object da in listData)
            {
                listBox1.Items.Add(da);
            }
        }
        // 给ArrayList 里添加值
        private void buttonAdd_Click(object sender, EventArgs e)
        {
            if (this.textBox1.Text.Trim().Length > 0)
            {
                this.listData.Add(this.textBox1.Text.Trim());
                this.listBox1.Items.Add(this.textBox1.Text.Trim());
            }
            else
                MessageBox.Show("请输入添加的内容!");
        }
        // 删除ArrayList 和listbox中的值
        private void buttonDel_Click(object sender, EventArgs e)
        {
            int index = this.listBox1.SelectedIndex;
            if (index != -1)
            {
                this.listData.RemoveAt(index);
                this.listBox1.Items.RemoveAt(index);
            }
            else
                MessageBox.Show("请选择删除项或者没有可删除的项!");
        }
        // 关闭窗口,修改后的值就重新绑定到主窗口listbox上了
        private void buttonExit_Click(object sender, EventArgs e)
        {
            this.Close();
        }



   这里有一点要提醒一下,比较两个例子,我们都传的是引用类型,一个是String,另一个是ArrayList,为什么string类型不能修改主窗体的数据呢?其实在.Net中对string类型的修改并不是修改原来的值,原来的值没有变化,而是重新生成一个新的字符串,下面是一个很好的说明。

public class PdtGrp
{
    [STAThread]
    static void Main(string[] args)
    {
            string str1 = "abc";
            string str2 = str1;
            str1 = "123";
            Console.WriteLine(str1);
            Console.WriteLine("--------------");
            Console.WriteLine(str2);
            Console.WriteLine("--------------");
            ArrayList al1 = new ArrayList();
            al1.Add("abc");
            ArrayList al2 = al1;
            al2.Add("123");
            foreach(object o in al1)
                Console.WriteLine((string)o);
            Console.WriteLine("--------------");
            foreach(object o in al2)
                Console.WriteLine((string)o);
            Console.ReadLine();
        }
    }

输出结果:

123
--------------
abc
--------------
abc
123
--------------
abc
123


看看输出结果就明白了,另外对值类型的数据操作要使用ref关键字。
    总结,我们通过带参数的构造函数实现了窗体间的数据交互,代码看上去也比较清楚,在实际开发过程中,可以把DataSet,DataTable,或者是DataView当作参数,当然如果只是想修改一行,可以传个DataRow或者DataRowView。

Ubuntu无桥接模式或连不上网(详细解决方法 目录 问题1:Ubuntu没有未桥接的主机网络适配器 解决方法 1.打开VMware安装目录下的文件 ​编辑2.右键安装以上三个文件 3.打开网络状态属性,找到VMware bridgeProtocol,点击安装 问题2.Ubuntu桥接模式连不上网 1.win+r打开cmd终端,输入ipconfig /all 2.记录以下数据 3.打开VMware网络设置 问题1:Ubuntu没有未桥接的主机网络适配器 VMWare安装之后,虚拟网络一直使用默认配置 VMnet0为... 阅读详情

相关推荐

Jetson Orin NX 单目标跟踪算法实战

本文对比了NanoTrack和MixFormerV2两种目标跟踪算法在Jetson Orin NX边缘设备上的实际表现。通过天空小目标跟踪场景测试发现,NanoTrack虽然表征能力较弱,但具有目标身份一致性强、失败模式可控、计算负担小等优势,更适合作为边缘端默认算法。MixFormerV2则适用于高速运动等特定场景。实验数据显示NanoTrack在Orin NX上可达200FPS,远高于MixFormerV2的38-120FPS。建议先采用NanoTrack构建稳定系统,后续再评估复杂算法的适用性。

karmueo46的博客 586

C#窗体通过ArrayList

C#窗体通过ArrayList窗体代码        // 保存数据ArrayList         private ArrayList listData;        public Form1()        {            InitializeComponent();            // 初始化ArrayList             listData

云海唯C的专栏 3008

Delphi数据库系统开发完全手册 源代码

《Delphi数据库系统开发完全手册》一书的源代码

ArrayList用法

System.Collections.ArrayList类是一个特殊的数组。通过添加和删除元素,就可以动态改变数组的长度。 一.优点 1。支持自动改变大小的功能2。可以灵活的插入元素3。可以灵活的删除元素 二.局限性 跟一般的数组比起来,速度上差些 三.添加元素 1.publicvirtualintAdd(objectvalue); 将对象添加到ArrayList的结尾处 Arra...

weixin_34376562的博客 942

C# datagridview绑定Arraylist实体类的方法

1. 如何将ArrayList实体类绑定到datagridview将实体对象一个一个的加载进ArrayList对象中,在将ArrayList作为数据源绑定到datagridview。 注意:ArrayList对象中每个字段属性化后才能作为绑定后的有效字段. 比如必须:        private string msgtime;        public string MsgTime        {            get            {                return

灯塔ADA的专栏 1万+

C#窗体数据

参的方法,主要利用ArrayList 类型参数为引用递的特性.窗体:public partial class FrmMain : Form    {        private ArrayList arySf;//数据的变量        public FrmMain()        {            InitializeComponent();         

ltolll的博客(技术版) 1344

winform窗体小结

1 用属性 (窗体) private ArrayList arrlOut; public ArrayList arrlIn//要用pulibc { set { this .arrlOut = value;//这里不能用arrlIn而要单独声明一个变量 ...

T87406621的博客 149

C#窗体数据(转)

关于C#窗体数据的方法好几种,在项目中都各有应用,虽然简单,这里记录下来,分享给大家!一、使用带参数的构造函数主窗体 private void button_Click(object sender, System.EventArgs e){// 将主窗体的控件作为参数递到子窗体Form2 formChild = new Form2(this.textBoxFrm1.T...

weixin_34242331的博客 121

C#窗体数据

前言:一篇很老的文章,保存下 关于C#窗体数据的方法好几种,在项目中都各有应用,虽然简单,这里记录下来,分享给大家! 一、使用带参数的构造函数 主窗体 private void button_Click(object sender, System.EventArgs e) { // 将主窗体的控件作为参数递到子窗体 Form2 formChild = ne...

明有风的博客 5729

轻松掌握Windows窗体数据交互

Windows 窗体是用于 Microsoft Windows 应用程序开发的、基于 .NET Framework 的新平台。此框架提供一个有条理的、面向对象的、可扩展的类集,可以开发丰富的 Windows 应用程序。一个Windows窗体就代表了.NET架构里的System.Windows.Forms.Form类的一个实例。在技术论坛经常看到有人问起如何在两个Form数据,访问修改对方窗体里面的,本文通过一些示例进行演示讲解。

3万+

.net中轻松掌握Windows窗体数据交互

 在.net中轻松掌握Windows窗体数据交互By zhzuo(秋枫)  转载自:CSDNWindows 窗体是用于 Microsoft Windows 应用程序开发的、基于 .NET Framework 的新平台。此框架提供一个有条理的、面向对象的、可扩展的类集,它使您得以开发丰富的 Windows 应用程序。一个Windows窗体就代表了.NET架构里的System.Wind

1333

arraylist按引用递和

假设有List a = new ArrayList List b = new ArrayList b.add(1); b.add(2); b.add(3); 当a = b,这个时候属于引用递;当a的数据改变,b的数据也会跟着改变。 假设a.set(0,2);这个时候b的数据就会变成2,2,3; 如果不希望引用递,只是递数,可以这么做; for(i=0;i { a.set

laobai19930806的博客 3446

C# ArrayList循环遍历ListBox

1 定义一个ArrayList对象,这个ArrayList对象后面要用         System.Collections.ArrayList m_list = new System.Collections.ArrayList();//   2  向listbox中添加元素  for (int i = 0; i             {            

xinxin88o的专栏 1654

java arraylist,如何在ArrayList数据

im new with android studio and im having trouble on how can I pass some specific data/s from one arraylist to another arraylist. Im currently working on with an ordering system. Iam trying to add the ...

weixin_30066779的博客 490
上一篇: 用CheckForIllegalCrossThreadCalls 属性解决C#线程间操作无效
下一篇: C#窗体间的数据传值(使用带参数的构造函数或使用引用类型)
fairy_study
博客等级 码龄18年 29粉丝 35原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值