상세 컨텐츠

본문 제목

[C#] Interface로 구현한 폼 간 값전달

C#

by 메타샤워 2023. 7. 18. 18:38

본문

Form 과 Form 간 값전달에 대해서 interface 를 이용해서 OOP를 만족하면서 멋지게 구현할 수 있는 방법을 소개한다.

 
우선 기본적으로 할 부분은 노출 시킬 부분에 대한 Inferface를 정의하는 것이다.
 
여기서는 SetData 메서드가 바로 인터페이스화 될 영역이 되겟다.
public interface IMyInterface  
{  
	void SetData(String Data);  
}
그리고 Form1과 Form2의 코드를 다음과 같이 구성 하면 된다.
public partial class Form1 : Form, IMyInterface  
{  
    public Form1()  
    {  
        InitializeComponent();  
    }  
    private void button1_Click(object sender, EventArgs e)  
    {  
        Form2 frm = new Form2(this as IMyInterface);  
        frm.Show();  
    }  
    public void SetData(String Data)  
    {  
        textBox1.Text = Data;  
    }  
}
 
Form1에서는 위에서 구현한 인터페이스를 상속하고 인터페이스에 있는 메서드를 구현해준다.
Form1에서 생성된 Form2의 생성자에서 Inferface를 같이 넣어주면 되겠다.
 
public partial class Form2 : Form  
{  
    private IMyInterface frm = null;  
    public Form2(IMyInterface frm)  
    {  
        InitializeComponent();  
        this.frm = frm;  
    }  
    private void button1_Click(object sender, EventArgs e)  
    {  
        frm.SetData(textBox1.Text);  
    }  
}
Form2에서는 생성자에서 전달 받은 인터페이스의 메서드로 Form1의 값을 조정함으로써
Form2의 값을 Form1로 전달 할수 있게 된다.
이렇게 구현해놓고 다음과 같은 에러가 난다면!!
 
일관성 없는 엑세스 가능성 MyApplication.IMyInferface매개 변수 형식이 MyApplication,Form2.Form2(MyApplication.iMyinterface)'       메서드보다 엑세스 하기 어렵습니다.
 
이런 에러가 난다면 인터페이스 구현 한 부분에 public 한정자를 빼먹어서 그렇다
Visual Studio2010에서 인터페이스 파일을 새로 만들면  Public 한정자가 안붙어 있는데 public한정자 붙여주면 에러가 처리된다.

'C#' 카테고리의 다른 글

.NET Serialization 닷넷 객체직렬화  (0) 2023.07.18
[C#] Nullable<T>  (0) 2023.07.18
[c# 키워드] Lambda Expression =>  (0) 2023.07.18
[c# 키워드] delegate  (0) 2023.07.18
[c# 키워드] yield  (0) 2023.07.18

관련글 더보기