最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2018年09月04日 14:43:46   作者:大白快跑8  
這篇文章主要介紹了WinForm 窗體之間傳值的幾種方式(小結(jié)),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

前言

小編最近維護(hù)一個(gè)Winfrom窗體,是項(xiàng)目中CS端的主窗體,很多子窗體需要從主窗體獲取值,同時(shí)子窗體還需要給主窗體回傳值,下面來(lái)給大家介紹一下。

正文

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

方式一: 使用公共靜態(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)成員,方便其他窗體調(diào)用
  frmMain.terminalID = "q13bh01-bh11";
}

特點(diǎn) : 雙向傳值,實(shí)現(xiàn)簡(jiǎn)單
缺點(diǎn): 靜態(tài)變量在類(lèi)加載的時(shí)候分配內(nèi)存,存儲(chǔ)于方法區(qū),一般不會(huì)被銷(xiāo)毀,在系統(tǒng)不夠內(nèi)存情況下會(huì)自動(dòng)回收靜態(tài)內(nèi)存,這樣就會(huì)引起訪問(wèn)全局靜態(tài)錯(cuò)誤。

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

主窗體frmMain中代碼

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

子窗體frmGroup中代碼

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

特點(diǎn) : 單向傳值,只能主窗體給子窗體傳值,實(shí)現(xiàn)簡(jiǎn)單

方式三: 使用委托傳值

先來(lái)看子窗體frmGroup中代碼

namespace Siemens.Simatic.GUIClient.MESClient
{
  //1、聲明一個(gè)委托
  public delegate void setTextValue(string textValue,bool flag);
  public partial class frmGroup : Form
  {
    //2、聲明一個(gè)委托類(lèi)型的事件
     public event setTextValue setFormTextValue;
     public string groupName = "";
     public bool flagBtnGroup = false; 
     public frmGroup()
     {
      InitializeComponent();
     }
     //輪詢‘行為'按鈕(相當(dāng)于按鈕單擊事件)
     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、準(zhǔn)備要回傳的數(shù)據(jù)。 
        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);
      //變量傳值 ,注意順序?qū)懺赟howDialog()方法之前
      frmGro .stationID = this.terminalID;
      frmGro .ShowDialog();
    }
    //5、事件具體實(shí)現(xiàn)
     public void frmGro _setFormTextValue(string textValue,bool flag)
    { 
      this.newGroupName = textValue;
      this.flagBtnGroup = flag;
      if (!string.IsNullOrEmpty(newGroupName))
      {
         ……
      }
     }

特點(diǎn) :適合子窗體數(shù)據(jù)實(shí)時(shí)回傳父窗體。

方式四:使用構(gòu)造函數(shù)傳遞一個(gè)數(shù)值

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

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

方式五:把A窗體整個(gè)傳遞給B窗體

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

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

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

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

叨叨兩句

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

總結(jié)

感謝您的閱讀,窗體傳值有好多種方法,構(gòu)造參數(shù)參數(shù)傳值、公共屬性傳值等,各種場(chǎng)景下找到適合需求的最好,希望為小編提出寶貴意見(jiàn)!

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C# OleDbDataReader快速數(shù)據(jù)讀取方式(3種)

    C# OleDbDataReader快速數(shù)據(jù)讀取方式(3種)

    這篇文章主要介紹了C# OleDbDataReader快速數(shù)據(jù)讀取方式(3種),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • C#中一個(gè)方法返回多個(gè)值的實(shí)現(xiàn)方法小結(jié)

    C#中一個(gè)方法返回多個(gè)值的實(shí)現(xiàn)方法小結(jié)

    通常一個(gè)方法只能返回一個(gè)值,但是如果在某些時(shí)候,我們想要返回多個(gè)值,例如某個(gè)方法將一個(gè)浮點(diǎn)數(shù)分割成一個(gè)整數(shù)和一個(gè)小數(shù)返回,因此本文給大家介紹了C#中一個(gè)方法返回多個(gè)值的實(shí)現(xiàn)方法及示例代碼,需要的朋友可以參考下
    2024-05-05
  • C#?winform中ComboBox數(shù)據(jù)綁定的兩種方法及效率詳解

    C#?winform中ComboBox數(shù)據(jù)綁定的兩種方法及效率詳解

    這篇文章主要給大家介紹了關(guān)于C#?winform中ComboBox數(shù)據(jù)綁定的兩種方法及效率,Winform?ComboBox數(shù)據(jù)綁定是指將數(shù)據(jù)源中的數(shù)據(jù)與ComboBox控件進(jìn)行關(guān)聯(lián),需要的朋友可以參考下
    2023-08-08
  • Unity3D使用Shader實(shí)現(xiàn)腐蝕消失

    Unity3D使用Shader實(shí)現(xiàn)腐蝕消失

    這篇文章主要為大家詳細(xì)介紹了Unity3D使用Shader實(shí)現(xiàn)腐蝕消失,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • 基于C#實(shí)現(xiàn)在圖片上繪制文字

    基于C#實(shí)現(xiàn)在圖片上繪制文字

    這篇文章主要為大家詳細(xì)介紹了如何利用C#實(shí)現(xiàn)在圖片上繪制文字的效果,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下
    2022-12-12
  • C# 將透明圖片的非透明區(qū)域轉(zhuǎn)換成Region的實(shí)例代碼

    C# 將透明圖片的非透明區(qū)域轉(zhuǎn)換成Region的實(shí)例代碼

    以下代碼實(shí)現(xiàn)將一張帶透明度的png圖片的非透明部分轉(zhuǎn)換成Region輸出的方法,有需要的朋友可以參考一下
    2013-10-10
  • Unity3D實(shí)現(xiàn)播放gif圖功能

    Unity3D實(shí)現(xiàn)播放gif圖功能

    這篇文章主要為大家詳細(xì)介紹了Unity3D實(shí)現(xiàn)播放gif圖功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • C#中的日期時(shí)間比較和格式化的方法

    C#中的日期時(shí)間比較和格式化的方法

    本文將介紹C#中常用的日期時(shí)間比較方法(CompareTo、Equals和比較運(yùn)算符)以及日期時(shí)間格式化方法(ToString、自定義格式字符串和標(biāo)準(zhǔn)格式),具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-10-10
  • C#使用時(shí)序數(shù)據(jù)庫(kù)InfluxDB的教程詳解

    C#使用時(shí)序數(shù)據(jù)庫(kù)InfluxDB的教程詳解

    InfluxDB是一個(gè)開(kāi)源的時(shí)序數(shù)據(jù)庫(kù),可以自動(dòng)處理時(shí)間序列數(shù)據(jù),這篇文章主要為大家詳細(xì)介紹了C#如何使用InfluxDB,感興趣的小伙伴可以跟隨小編一起了解下
    2023-11-11
  • C# Form自定義光標(biāo)的簡(jiǎn)單實(shí)現(xiàn)

    C# Form自定義光標(biāo)的簡(jiǎn)單實(shí)現(xiàn)

    這篇文章主要介紹了C# Form自定義光標(biāo)的簡(jiǎn)單實(shí)現(xiàn),有需要的朋友可以參考一下
    2014-01-01

最新評(píng)論

南郑县| 昭觉县| 冀州市| 将乐县| 资阳市| 桃园县| 尤溪县| 台前县| 新龙县| 伊吾县| 牙克石市| 十堰市| 揭东县| 楚雄市| 南丹县| 留坝县| 普格县| 灌云县| 西藏| 平利县| 托里县| 丹巴县| 桐乡市| 页游| 宜州市| 靖州| 隆安县| 永靖县| 康定县| 尼木县| 探索| 吉林省| 横峰县| 平乐县| 商都县| 伊川县| 青神县| 长春市| 北票市| 丰台区| 陕西省|