窗体间和自定义控件的传值

来源:互联网 发布:java 获取服务器ip 编辑:程序博客网 时间:2024/06/12 19:50

一、窗体间传值

1、子窗体From如果想调用主窗体的变量、方法,修改或获取主窗体控件的属性,可将主窗体作为一个参数在实例化From2时传入from2.

   代码如下:

在主窗体中:

第一步:在主窗体中建立代表主窗体的公共变量

 public mainFrom frm_main;        public mainFrom()        {            InitializeComponent();            frm_main = this;        }
第二步:在子窗体中设置窗体的构造函数,引入主窗体类型的参数

 private mainFrom frm_main;        public Form2(mainFrom  from)        {            InitializeComponent();            frm_main = from;        }
第三步:实例化子窗体时将主窗体 的变量代入子窗体
Form2 frm = new Form2(frm_main);            frm.Show();


2这部分内容转载自点击打开链接

图文详解C#窗体间传递数据
——窗口1若干TextBox中的数据,传递到窗口2中的ListView


功能描述:主窗体有一ListView控件和一“添加”Button控件。点击“添加”Button弹出一窗口,此窗口有若干TextBox,输入数据后,点击“确定”Button,数据回传到主窗体的ListView中。


核心知识:委托


实现步骤:

第一步:新建两个窗体,各自添加控件并设计成如下效果:

FrmMain 主窗体,Form2 交互录入窗体

 
第二步:Form2.cs中的代码编写如下:(红色标记代码需要手动输入)
namespace MenuDemo
{
    public delegate void MyDelegate(string Item1, string Item2);//委托实质上是一个类
    public partial class Form2 : Form
    {
        public MyDelegate myDelegate;//声明一个委托的对象
        public Form2()
        {         
            InitializeComponent();         
        }
           
        private void btnSure_Click(object sender, EventArgs e)
        {
            myDelegate(this.textBox1.Text, this.textBox2.Text);
            this.Dispose();  

        }
    }
}


第三步:主窗口代码编写如下:(红色标记代码需要手动输入)
namespace MenuDemo
{
    public partial class FrmMain : Form
    {        
        public FrmMain()
        {           
            InitializeComponent();
        }

        private void btnAdd_Click_1(object sender, EventArgs e)
        {
            Form2 f2 = new Form2();
            f2.myDelegate += new MyDelegate(Add);
            // f2.Owner = this;            f2.Show();
        }

        public void Add(string Item1, string Item2)
        {
            this.listView1.Items.Add(Item1);
            this.listView1.Items[listView1.Items.Count - 1].SubItems.Add(Item2);
        }

      
        
        private void btnDelete_Click_1(object sender, EventArgs e)
        {
            int i = 0;
            if (listView1.SelectedItems.Count > 0)
            {
                i = listView1.SelectedItems[0].Index;
                listView1.Items[i].Remove();
            }        
        }            
    }                     
}

3、自定义控件和主窗体的传值参考点击打开链接

利用事件委托

自定义控件的某个事件发生时,修改主窗体中的设置,可利用事件委托。在主窗体中的构造函数中

控件.事件1+=eventhandle (事件2);

事件1是指自定义控件中的事件,事件2是主窗体中的一个函数。

eventhandle:不同的事件需要不同的委托类型

+=:委托注册符。

过程:1、将事件所在的控件的modifiers属性设置为public

2、在自定义控件中建立事件。

private void button1_Click(object sender, EventArgs e)        {        }
3.在主窗体的构造函数里将自定义控件里的事件委托给主窗体里的事件

  gis11.button1.Click+=new EventHandler(button2_Click);
4、在主窗体中实现button2_Click函数

  private void button2_Click(object sender, EventArgs e)
        {
            Form2 frm = new Form2(frm_main);
            frm.Show();
        }


原创粉丝点击