C#/Winform

[C# Winform] PropertyGrid 데이터를 INI 파일로 저장하기

우준세 2021. 12. 13. 17:58
728x90
반응형

 

이번 포스팅은 PropertyGrid를 이용하여 Config 데이터들을 관리하고

내용을 INI 파일로 저장 및 읽기를 만든 것을 정리하였습니다. 


PropertyGrid란?

 

 

- PropertyGrid는 지정해준 속성 값들을 보여주고 변경할 수 있게 하는 기능으로 설정 값들을 지정할 때 많이 사용합니다. PropertyGrid의 설정 값들을 INI로 저장하거나 INI에 있는 설정 값들을 PropertyGrid에 띄워보게 하려고 합니다.

 

PropertyGrid 개념 

- 먼저 PropertyGrid의 데이터들을 만들고 확인해보고 INI파일로 저장하려고 했습니다.

 

코드 1) 카테고리와 속성 만들기

[DefaultPropertyAttribute("Name")]
public class ConfigParam
{
  /*
  * _addr, _PortNum이라는 변수들은 Property에 하나하나에 매칭
  * 그러나 private이므로 PropertyGrid는 변수들을 읽을수도 변경할 수도 없다.
  * 그래서 Property 지시자로 PropertyGrid와 연결하고 Property를 만든다.
  */
  private string _Addr;
  private int _PortNum;

  public ConfigParam() { }

  /*
  * private으로 선언한 변수들을 Property화 시켜 외부와의 통신을 위한 public 처리를 했다.
  * 각각의 Category별로 분류를 해야하기 위해 Attribute 기법을 쓴다.
  * Attribute 기법
  * '[ ]'를 통해 지정되며 클래스나 property 등에 특정한 특성을 지정하도록 하는 것 
  * Category 별로 Property를 분류하기 위한 Attribute의 지시자는 CategoryAttribute 이다.
  */
  [CategoryAttribute("Test Settings"),
  DescriptionAttribute("Setting for Test")]
  public string Addr
  {
  get { return _Addr; }
  set { _Addr = value; }
  }

  [CategoryAttribute("Test Settings"),
  DescriptionAttribute("Setting for Test")]
  public int PortNum
  {
  get { return _PortNum; }
  set { _PortNum = value; }
  }
}

 

코드 2) PropertyGrid에 default 값 넣기 

public void DefaultConfig()
{
  ConfigParam configSave = new ConfigParam();

  configSave.Addr = "192.168.0.1";
  configSave.PortNum = 5000;

  pGrid_Save.SelectedObject = configSave;
}

 

결과)

- 속성을 만들고 default 값을 넣어 확인했습니다.

- 이제 이 값들을 가지고 INI 파일을 만드는 과정을 알아보겠습니다.

 

INI 파일이란? 

- 프로그램을 만들다 보면 환경을 저장하는 설정 파일을 읽거나 쓰는 경우가 발생합니다. 

사용되는 많은 방법 중 하나는 .ini 파일을 이용하는 방법이며 저는 kernel32를 사용하여 만들었습니다. 

 

INI 파일 저장 코드

 

1) INI 파일 입출력 메소드를 가져온다.

[DllImport("kernel32")]
private static extern long WritePrivateProfileString(string section, string key, 
	string value, string filepath);

[DllImport("kernel32")]
private static extern int GetPrivateProfileString(string section, string key, string def,
StringBuilder retVal, int size, string filepath);

- DllImport를 사용하여 kernel32에 있는 ini파일 입출력 메소드를 가져옵니다.

 

 

2) Save와 Load 버튼을 구현하고 클릭 이벤트를 위한 코드를 작성합니다.

- inipath는 따로 설정해주셔야 합니다! 저는 D:\\Config.ini로 설정했습니다.

 

private void Btn_Save_Click(object sender, EventArgs e)
{
    SaveINI_File();
}

private void SaveINI_File()
{
  object obj = pGrid_Save.SelectedObject;

  ConfigParam Config_save = (ConfigParam)obj;

  iniFile.SaveINIFile(Config_save);
}

 

public void SaveINIFile(ConfigParam configdata)
{
  WritePrivateProfileString("Test", "Test1", Convert.ToString(configdata.Addr), this.inipath);
  WritePrivateProfileString("Test", "Test2", Convert.ToString(configdata.Addr), this.inipath);
}

 

결과)

 

- PropertyGrid에서 속성 값들을 바꾸고 Save 버튼을 누르니 설정해두었던 inipath에 Config.ini 파일로 속성 값들이 저장된 것을 확인할 수 있었습니다.

 

 

 

이렇게 C#으로 INI 파일을 저장하는 방법을 알아보았습니다

틀린 점이나 질문이 있으시면 댓글로 남겨주세요!

 

 

 

 

728x90
반응형