咨询热线:
024-88614238
最新动态
相关新闻
C#窗体间通讯的几种处理方法

主窗体Form1是一个ListBox,单击选中某列时,弹出窗体Form2,Form2中两个控件,一个是TextBox,显示选中的该列的文本,另一个是按钮,点击时将修改后的值回传,且在Form1中修改相应的列的文本,同时Form2关闭。

   方法一:传值
   最先想到的,Form2构造函数中接收一个string类型参数,即Form1中选中行的文本,将Form2的TextBox控件的Text设置为该string,即完成了Form1向Form2的传值。当Form2的AcceptChange按钮按下,需要修改Form1中ListBox中相应列的值,因此可以考虑同时将Form1中的ListBox控件当参数也传入Form2,所有修改工作都在Form2中完成,根据这个思路,Form2代码如下:

 publicpartial class Form2 : Form
    {
       private string text;
       private ListBox lb;
       private int index;

       //构造函数接收三个参数:选中行文本,ListBox控件,选中行索引
       public Form2(string text,ListBox lb,int index)
       {
           this.text = text;
           this.lb = lb;
           this.index = index;
           InitializeComponent();
           this.textBox1.Text = text;
       }

       private void btnChange_Click(object sender, EventArgs e)
                 

           string text = this.textBox1.Text;
           this.lb.Items.RemoveAt(index);
           this.lb.Items.Insert(index, text);
           this.Close();
       }
    }

    Form1中new窗体2时这么写:

public partial class Form1 :Form
    {
       int index = 0;
       string text = null;
       public Form1()
       {
           InitializeComponent();
       }

       private void listBox1_SelectedIndexChanged(object sender, EventArgse)
       {
           if (this.listBox1.SelectedItem != null)
           {
               text = this.listBox1.SelectedItem.ToString();
               index = this.listBox1.SelectedIndex;

               //构造Form2同时传递参数
               Form2 form2 = new Form2(text, listBox1, index);
               form2.ShowDialog();
           }
       }

   OK,方法一的解决方法就是这样,好处是直观,需要什么就传什么,缺点也是显而易见的,如果窗体1中需要修改的是一百个控件,难道构造的时候还传100个参数进去?况且如果其他窗体仍然需要弹Form2,那Form2就废了,只能供窗体1使用,除非写重载的构造函数,不利于代码的复用,继续看下一个方法。
方法二:继承
   这个方法我试了很多次,继承的确可以做,但是麻烦不说,还不方便,因此个人认为如果为了互相操作数据而使用继承,是不合适的,但既然是个方法,就扔出来看看,实际作用≈0。
   Form2:

//声明Form2继承于Form1

public partial classForm2 : Form1
    {
        publicint index;

       public ListBox lb;
       public Form2(string text)
        

           //将继承过来的listBox设置为不可见

           this.listBox1.Visible=false;
           InitializeComponent();

沈阳网络公司招聘

联系方式
地址:沈阳市东陵区
万柳塘路109甲1宏发 大厦525室
电话:024-24804848
8748636
15317796
102656105

友情链接(联系QQ:8748636) 沈阳网站制作| 沈阳网站制作| 沈阳SEO公司| 沈阳主机托管| 沈阳网络公司| 沈阳网站制作| 沈阳网站建设|
地址:沈阳市沈河区万柳塘路36-1 弘锦大厦412室 经理QQ:8748636 技术QQ:30999233 联系电话:024-88614238
Copyright? 2005-2013,沈阳海风网络科技有限公司 All Right Reserved. 版权所有 辽ICP备05004358号
【海风数据港】是专业沈阳服务器托管、沈阳网站制作、沈阳网站优化、沈阳网站建设的沈阳网络公司