2011-03-25 3 views
0

안녕하세요 저는 내 기본 양식에서 내 CRUD 버튼을 단순화하고 싶습니다. 이를 위해 모든 것을 사용자 지정 컨트롤로 변환하는 것이 가장 좋습니다.crud 버튼을 단순화

나는 로켓 프레임 워크를 언급했으며, 이것은 그가 다음과 같이 썼다. CRUD 버튼과 검색 버튼이있는 맞춤형 컨트롤을 만들고 loadAll 버튼을 같은 행에 정렬합니다. 그런 다음 특정 버튼이 필요할 때 우리는 모든 이미지를 하나의 이미지로 만드는 웹 사이트 이미지에서했던 것처럼 버튼의 위치를 ​​잡을 수 있습니다. 이것은 나에게 좋은 것처럼 들린다.

질문 :
1)이 사용자 정의 컨트롤 버튼을 GUI 양식에 어떻게 적용합니까?
2) CRUD 버튼에 대한 확인 메시지와 결과 메시지를 사용자에게 어떻게 단순화 할 수 있습니까? save() 이벤트 다음에 "This record is saved successfully/failed" 버튼을 누를 때마다 내 모든 crud 버튼에 여러 번 "Are you sure to save/ delete"을 쓰는 것이 불필요하다고 느꼈습니다. 어쨌든 나는 이것을 CRUD 커스텀 컨트롤의 폼에 넣음으로써 이것을 단순화 할 수 있습니까? 예를 들어 사용자가 저장 버튼을 누르면 기본 양식 확인 메시지가 실행되고 데이터 모델의 Save() 이벤트가 다시 실행되고 기반 양식으로 돌아가 결과 메시지가 "성공 적으로 저장"됩니다.

public partial class AdminController : UserControl 
{ 
    public event EventHandler AddUpdateClick; 
    public event EventHandler DeleteClick; 
    public event EventHandler CreateNewClick; 
    public event EventHandler RefreshClick; 
    public event EventHandler FilterClick; 
    public event EventHandler LoadAllClick; 
    public AdminController() 
    { 
     InitializeComponent(); 
    } 

    private void buttonDelete_Click(object sender, EventArgs e) 
    { 
     if (DeleteClick != null) 
      DeleteClick(sender, e); 
    } 

    private void buttonAddUpdate_Click(object sender, EventArgs e) 
    { 
     if (AddUpdateClick != null) 
      AddUpdateClick(sender, e); 
    } 

    private void buttonCreateNew_Click(object sender, EventArgs e) 
    { 
     if (CreateNewClick != null) 
      CreateNewClick(sender, e); 
    } 

    private void buttonLoadAll_Click(object sender, EventArgs e) 
    { 
     if (LoadAllClick != null) 
      LoadAllClick(sender, e); 
    } 

    private void buttonFilter_Click(object sender, EventArgs e) 
    { 
     if (FilterClick != null) 
      FilterClick(sender, e); 
    } 

    private void buttonRefresh_Click(object sender, EventArgs e) 
    { 
     if (RefreshClick != null) 
      RefreshClick(sender, e); 
    } 
} 

답변

1

1) 일단 사용자 컨트롤 도구 상자에서 사용할 수 컴파일 조언을 주시기 바랍니다. 도구 상자의 가장 큰 그룹을보십시오.

if (DeleteClick != null) 
    { 
     if (MessageBox.Show("Are you sure to save?", "Please Confirm", MessageBoxButtons.OKCancel) == DialogResult.OK) 
     { 
      DeleteClick(sender, e); 
     } 
    } 
:

if (DeleteClick != null) 
    DeleteClick(sender, e); 

가 삭제 이벤트가 위의 코드를 변경하는 것을 고려 호출하기 전에 확인 메시지를 구현하려면 :

2) 다음 코드는 중독 된 경우 AdminController의 DeleteClick 이벤트를 호출

성공/실패 메시지를 구현하기 위해 이벤트를 후킹하는 대리자는 AdminController가 부울 값을 다시 전달하여 업데이트가 성공했는지 여부를 알 수 있습니다. 다음과 같이

public partial class AdminController : UserControl 
{ 
    public delegate void AdminControllerEvent(object sender, AdminControllerEventArgs e); 

    public event AdminControllerEvent AddUpdateClick; 
    public event AdminControllerEvent DeleteClick; 

그리고 성공의 값을 테스트 할 수 있습니다 : 이것은 AdminControllerEventArgs를 사용하는 AdminController의 이벤트의 선언을 사용자 정의는 EventArgs 클래스

public class AdminControllerEventArgs : EventArgs 
{ 
    public bool Success; 

    public AdminControllerEventArgs() : base() 
    { 
     Success = true; 
    } 
} 

를 사용하여 변경 achived 할 수

AdminControllerEventArgs e = new AdminControllerEventArgs(); 

    if (DeleteClick != null) 
    { 
     if (MessageBox.Show("Are you sure to save?", "Please Confirm", MessageBoxButtons.OKCancel) == DialogResult.OK) 
     { 
      DeleteClick(sender, e); 

      if (adminControllerEventArgs.Success) 
      { 
       MessageBox.Show("This record is saved successfully."); 
      } 
      else 
      { 
       MessageBox.Show("This record is saved failed."); 
      } 
     } 
    } 

데이터베이스 업데이트가 실패하면 대리인이 새 이벤트에 후킹하여 e.Success = false을 설정해야합니다.

+0

안녕하십니까, 죄송합니다. 귀하의 코드를 시도했지만'if (adminControllerEventArgs.Success)'가 성공하지 못했습니다. 나는 public static bool Success로 바꿨다. 작동합니다. 'e.Success = false'에 관해서 말한 것에 관해서, u가 반환하는 모든 함수에 그것을 넣어야한다는 것을 의미합니까? – VeecoTech

+0

안녕하세요, 코드를 추가 한 후에 빌드 할 수 없습니다. 'DeleteClick (sender, e);'에는 잘못된 인수가 있습니다. 나는 그것이'public delegate void AdminControllerEvent (객체 발신자, AdminControllerEventArgs e)로 인한 것이라고 생각한다. '도와 드릴까요? – VeecoTech

+0

나는 private void btnDelete_Click (객체 발신자, EventArgs e)을'private void btnDelete_Click (객체 발신자, AdminControllerEventArgs e)'가되도록 변경하려고 시도했지만, this.btnDelete.Click + = new System.EventHandler (this.with with "Error" 'btnDelete_Click'에 대한 오버로드가 'System.EventHandler'대리자와 일치하지 않습니다. " – VeecoTech