欧美大屁股bbbbxxxx,狼人大香伊蕉国产www亚洲,男ji大巴进入女人的视频小说,男人把ji大巴放进女人免费视频,免费情侣作爱视频

歡迎來到入門教程網!

C#教程

當前位置:主頁 > 軟件編程 > C#教程 >

c# WinForm 窗體之間傳值的幾種方式(小結)

來源:本站原創(chuàng)|時間:2020-01-10|欄目:C#教程|點擊: 次

前言

小編最近維護一個Winfrom窗體,是項目中CS端的主窗體,很多子窗體需要從主窗體獲取值,同時子窗體還需要給主窗體回傳值,下面來給大家介紹一下。

正文

本文中以主窗體為frmMain,子窗體為frmGroup ,兩窗體之間的傳值來做示例。

方式一: 使用公共靜態(tài)變量傳值

主窗體frmMain中代碼

public partial class frmMain : Form
{
 //聲明工位ID 為公共靜態(tài)變量
 public static string terminalID = "";
 //給靜態(tài)變量賦值
 terminalID = "q13bh01-bh12";
 }

子窗體frmGroup中代碼

 private void frmGroup_Load(object sender, EventArgs e)
{
  this.txtTerminalID.Text= frmMain.terminalID.Trim(); 
  //可以再賦值給靜態(tài)成員,方便其他窗體調用
  frmMain.terminalID = "q13bh01-bh11";
}

特點 : 雙向傳值,實現簡單
缺點: 靜態(tài)變量在類加載的時候分配內存,存儲于方法區(qū),一般不會被銷毀,在系統不夠內存情況下會自動回收靜態(tài)內存,這樣就會引起訪問全局靜態(tài)錯誤。

方式二: 使用公共變量傳值

主窗體frmMain中代碼

public partial class frmMain : Form
{
 //聲明工位ID 為公共變量
 public string terminalID = "";
 //給變量賦值
 terminalID = "q13bh01-bh12";
 //單擊‘行為'按鈕的時候會給窗體傳值
 private void btnGroup_Click(object sender, EventArgs e)
    {
      frmGroup frmGro = new frmGroup();
      //變量傳值 ,注意順序寫在ShowDialog()方法之前
      frmGro .stationID = this.terminalID;
      frmGro .ShowDialog();
    }
 }

子窗體frmGroup中代碼

 public partial class frmGroup : Form
 {
  //定義公共屬性
  public string stationID = "";
 }

特點 : 單向傳值,只能主窗體給子窗體傳值,實現簡單

方式三: 使用委托傳值

先來看子窗體frmGroup中代碼

namespace Siemens.Simatic.GUIClient.MESClient
{
  //1、聲明一個委托
  public delegate void setTextValue(string textValue,bool flag);
  public partial class frmGroup : Form
  {
    //2、聲明一個委托類型的事件
     public event setTextValue setFormTextValue;
     public string groupName = "";
     public bool flagBtnGroup = false; 
     public frmGroup()
     {
      InitializeComponent();
     }
     //輪詢‘行為'按鈕(相當于按鈕單擊事件)
     private void tmrBtn_Tick(object sender, EventArgs e)
     {
      if (sender is ButtonX) {
        ButtonX butX = (ButtonX)sender;//判斷觸發(fā)事件的是不是Button
        groupName = butX.Text.Trim();
        flagBtnGroup = true;
        //3、準備要回傳的數據。 
        setFormTextValue(this.groupName.Replace(" ", ""), this.flagBtnGroup );
        this.Close();
        return;
      } 
    }

主窗體frmMain中代碼

 private void btnGroup_Click(object sender, EventArgs e)
    {
      frmGroup frmGro = new frmGroup();
       //4、初始化事件 
      frmGro .setFormTextValue += new setTextValue(frmGro _setFormTextValue);
      //變量傳值 ,注意順序寫在ShowDialog()方法之前
      frmGro .stationID = this.terminalID;
      frmGro .ShowDialog();
    }
    //5、事件具體實現
     public void frmGro _setFormTextValue(string textValue,bool flag)
    { 
      this.newGroupName = textValue;
      this.flagBtnGroup = flag;
      if (!string.IsNullOrEmpty(newGroupName))
      {
         ……
      }
     }

特點 :適合子窗體數據實時回傳父窗體。

方式四:使用構造函數傳遞一個數值

class FormB
{
 int orgId;
 public FormB(int orgId)
 {
   this.orgId=orgId;
 }
}

class FormA
{
public void ShowB()
{
  FormB fb=new FormB(5); // 5是要傳遞過去的值
  fb.Show();
}
}

方式五:把A窗體整個傳遞給B窗體

有些時候需要在B窗體里對A窗體的某個控件值做修改,并且需要立即改變A窗體的控件顯示,本方法適合這種情況。

修改FormA,把要在B里處理的控件的可訪問性(Modifiers)設為public,然后按下面的方式處理

class FormA
{
public void ShowB()
{
  FormB fb=new FormB(this); // 在構造函數里把A窗體本身傳過去
  fb.Show();
}
}

class FormB
{
FormA fm; //B窗體增加一個FormA類型的成員
public FormB(FormA fm) //添加一個帶參數的構造方法,參數類型是FormA
{
  this.fm=fm;
}
protected void Method1()
{
  fm.txtName.Text="Haha!"; //在這兒可以直接操作A窗體里的控件了!
}
}

叨叨兩句

項目中父窗體向子窗體傳值傳的是固定值,用的是第一種方式,子窗體向父窗體傳值傳的是變化的值,用的是第三種方式,第三種方式為我解決了一個大麻煩。

總結

感謝您的閱讀,窗體傳值有好多種方法,構造參數參數傳值、公共屬性傳值等,各種場景下找到適合需求的最好,希望為小編提出寶貴意見!

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持我們。

上一篇:C#類繼承中構造函數的執(zhí)行序列示例詳解

欄    目:C#教程

下一篇:C#簡單操作MongoDB的步驟全紀錄

本文標題:c# WinForm 窗體之間傳值的幾種方式(小結)

本文地址:http://mengdiqiu.com.cn/a1/C_jiaocheng/5090.html

網頁制作CMS教程網絡編程軟件編程腳本語言數據庫服務器

如果侵犯了您的權利,請與我們聯系,我們將在24小時內進行處理、任何非本站因素導致的法律后果,本站均不負任何責任。

聯系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網 版權所有