DBGrid가있는 mainForm이 있고 사용자가 선택할 수있는 모든 DBGrid 열을 보여주는 CheckListBox가있는 두 번째 폼이 있습니다. Form2에서 MainForm에있는 DBGrid를 참조해야합니다. 이 두 번째 형식은 dbdgrid 열에 연결된 모든 프로 시저를 처리하므로 쉽게 다시 사용할 수 있습니다. 그건 생각했지만 DBGrid 참조를 전달하는 방법은 찾지 못했습니다. 가능합니까?다른 폼에서 DBGrid를 다시 작성하는 방법
답변
, Form2를에 그냥 그런
Form2.Grid := MainForm.DBGrid1;
을, 그리고 속성
TForm2
[...]
private
FGrid : TDBGrid
public
property Grid : TDBGrid read FGrid write FGrid;
을 정의, Grid
을 변경하고자하는 모든 작업을 수행 할 수 있으며 MainForm.DBGrid1에 변경 사항이 적용됩니다.
가능합니까?
질문은 오히려 이되어야합니다. 원하는 것을 얻는 더 좋은 방법이 있습니까? Form2
다른 형태의 제어와 기본적으로 일을하는 경우
- 그것은 유지 보수가 있을까? 다른 양식에서도 다른 양식의 구성 요소에 대한 참조를 보유해야하는 경우 어떻게해야합니까?
- 컨트롤이 다른 형태로 사용되면 버그를 찾는 것이 얼마나 힘들겠습니까?
- 그런 해결책이 SOLID principles과 일치합니까?
이러한 질문에 답하는 것은 다른 접근법을 찾는 데 도움이됩니다.
separate UI and business logic을 고려해야합니다. A TDBGrid
은 데이터베이스에서 응용 프로그램으로 데이터를 가져 오는 편리한 방법 인 것처럼 보이지만 동시에 데이터를로드하고 표시하기 때문에 Single Responsibility Principle을 위반합니다. 응용 프로그램 내에서 기본 데이터 공급자로 사용하지 마십시오. 소프트웨어의 더 깊은 UI 독립 계층에서 SQL 쿼리를 수행하십시오. 컨테이너에 결과를 저장하고 다른 양식에서 원하는 모든 방식으로 결과를 표시하십시오. 당신이 TForm2의 인스턴스를 생성 한 후
나는 원칙적으로 당신이 옳다고 생각하지만, 더 좋은 방법을 찾기 시작할 곳을 모르겠다. 또한 이것은 DBGrid 열 레이아웃을 표시하는 보조 양식이 항상 DBGrid와 함께 이동하는 경우입니다. – Stark
제안 해 주셔서 감사합니다. 나는 노력했다. 그리고 그것은 그것이 일하는 것처럼 본다. 이제 form2에서 주 양식의 DBGrid 열을 이동할 때 뭔가해야합니다. MainForm에서 OnColumnMoved를 사용했을 것입니다 ... – Stark
글쎄, 당신의 원래 질문에 답했습니다. 그래서 당신이 녹색 "틱"아이콘을 클릭하여 그것을 받아들이면 좋을 것입니다. OnColumMoved 이벤트의 경우 Form2에 동일한 매개 변수 시그니처가있는 프로 시저를 제공하고 코드를 작성한 다음 MainForm.DBGrid1의 OnColumnMoved를 해당 매개 변수에 지정합니다. – MartynA