2015-01-21 3 views
1

폼에 여러 개의 텍스트 상자가 있습니다. 나는 코드의 많은 작성하고 데이터베이스에 저장 한 :
코드 파일에서 컨트롤의 속성을 동적으로 설정하십시오.

Textbox1.Location = New System.Drawing.Point(609, 3) 
Textbox2.Location = New System.Drawing.Point(659, 3) 
Textbox1.BackColor = System.Drawing.Color.Green 
Textbox2.BackColor = System.Drawing.Color.Blue 
TextboxX.AnyProperty = PropertyValue 

데이터베이스에 코드를 작성하는 이유는 사용자가 특정 위치에 텍스트 상자를 원하는 경우 또는 텍스트 상자, 우리의 프로그래머의 속성을 변경하고 싶어한다는 것입니다 소프트웨어를 다시 컴파일하지 말고 해당 텍스트 상자의 데이터베이스 코드를 변경하십시오.

텍스트 상자의 속성을 적절히 변경하기 위해 데이터베이스에서이 코드를 실행할 수있는 방법이 있습니까?

답변

1

데이터베이스에 값을 직렬화 (serialize)하고 데이터베이스에 값을 저장 한 다음 양식의 OnCreate 이벤트 처리기에서 데이터베이스의 값을 읽고 그에 따라 Reflection을 사용하여 설정해야합니다.

데이터베이스 테이블의 구조를 보자

이 기록을 통해 내이 테이블 양식의 전체 유형 이름에 기반 양식 쿼리의 OnCreate에서 제안

Create table FormData 
(ID int, 
FormFullTypeName varchar(500), 
ControlName varchar(500), 
PropertyName varchar(100), 
Value varchar(max)) 

다음 루프 및 특정 Control를 찾아 컨트롤에 Reflection에 해당하는 Property을 찾은 다음 값을 비 직렬화하여 값을 Reflection으로 다시 설정합니다. 예를 들어

난 당신이 findControlByName이 링크에서 살펴 구현을 위해 DB

var controlName = 'yourcontrolName from db'; 
var propertyName = 'your property name from db'; 
object value = //the deserialized value from db; 

var control = findControlByName(controlName); 
control.GetType().GetProperty(propertyName, System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance).SetValue(control, value, new object[] { }); 

에서이 변수를 설정했다고 가정 Get a Windows Forms control by name in C#

나는 이것이 당신에게

+0

수 당신하시기 바랍니다 도움이되기를 바랍니다 리플렉션을 사용하여 동일한 작업을 수행 할 링크 나 코드를 제공 하시겠습니까? –

+0

@PowerUser 내 대답에 일부 코드를 추가했습니다 – RezaRahmati

+0

@PowerUser 죄송합니다 구문은 C# 용, 당신은 vb.net로 변환해야합니다 – RezaRahmati