c\#WinForm 창 사이 의 값 을 전달 하 는 몇 가지 방식(소결)

머리말
최근 에 Winfrom 창 을 유지 하고 있 습 니 다.프로젝트 의 CS 엔 드 의 메 인 창 입 니 다.많은 하위 창 은 메 인 창 에서 값 을 받 아야 합 니 다.또한 하위 창 은 메 인 창 에 값 을 되 돌려 주어 야 합 니 다.다음은 소개 하 겠 습 니 다.
본문
본 고 는 메 인 창 체 를 frm Main 로 하고,하위 창 체 는 frm Group 이 며,두 창 사이 의 전 가 를 예 로 들 었 다.
방식 1:공공 정적 변 수 를 사용 하여 값 을 전달 합 니 다.
주 창 frmMain 코드

public partial class frmMain : Form
{
 //    ID        
 public static string terminalID = "";
 //       
 terminalID = "q13bh01-bh12";
 }
하위 창 frmGroup 코드

 private void frmGroup_Load(object sender, EventArgs e)
{
  this.txtTerminalID.Text= frmMain.terminalID.Trim(); 
  //          ,        
  frmMain.terminalID = "q13bh01-bh11";
}
특징:양 방향 전송 값,간단 실현
단점:정적 변 수 는 클래스 로 딩 할 때 메모 리 를 분배 하고 방법 구역 에 저장 합 니 다.일반적으로 소각 되 지 않 습 니 다.시스템 이 메모리 가 부족 한 상황 에서 정적 메모 리 를 자동 으로 회수 합 니 다.그러면 전체 정적 오 류 를 일 으 킬 수 있 습 니 다.
방식 2:공공 변수 전송 값 사용
주 창 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 = "";
 }
특징:단 방향 전송 값,주 창 만 하위 창 에 전달 할 수 있 습 니 다.간단 합 니 다.
방식 3:의뢰 전송 치 사용
먼저 하위 창 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;//          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))
      {
         ……
      }
     }
특징:하위 창 데 이 터 를 실시 간 으로 부모 창 으로 전송 하기에 적합 합 니 다.
방식 4:구조 함수 로 수 치 를 전달 합 니 다.

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

class FormA
{
public void ShowB()
{
  FormB fb=new FormB(5); // 5        
  fb.Show();
}
}

방식 5: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       !
}
}
두 어 마디 중 얼 거리 다
프로젝트 에서 부모 창 이 하위 창 에 값 을 전달 하 는 것 은 고정 값 입 니 다.첫 번 째 방식 을 사 용 했 습 니 다.하위 창 이 부모 창 에 값 을 전달 하 는 것 은 변화 하 는 값 입 니 다.세 번 째 방식 을 사 용 했 고 세 번 째 방식 은 저 에 게 큰 문 제 를 해결 해 주 었 습 니 다.
총결산
읽 어 주 셔 서 감사합니다. 창 전송 값 은 여러 가지 방법 이 있 습 니 다.구조 적 매개 변수 전송 값,공공 속성 전송 값 등 각종 장면 에서 수요 에 맞 는 가장 좋 은 것 을 찾 아 작은 편집 에 소중 한 의견 을 제시 하고 싶 습 니 다!
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기