1. 程式人生 > >窗體間和自定義控制元件的傳值

窗體間和自定義控制元件的傳值

一、窗體間傳值

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();
        }