2013-12-16 6 views
-1

후에 DataGridViewTextBoxCell에서 텍스트 선택 취소 사용자가 DataGridViewTextBox에 텍스트를 입력하는 동안 입력되는 값에 따라 컨트롤을 사용하거나 사용하지 않도록 설정하려는 경우가 있습니다. 예를 들어 올바른 값을 입력 한 후 단추를 활성화하십시오..CommitEdit (DataGridViewDataErrorContexts.Commit)

Microsoft는 비활성화 할 수있는 DataGridViewButtonCell을 만드는 방법에 대한 기사에서 방법을 보여주었습니다.

하면, 이벤트가이 이벤트를 수신하면
  • 을 DataGridView.CurrentCellDirtyStateChanged 취득하여 현재 셀의 변경 사항을 적용해야합니다

    • 을 (그것은 또한 다른 솔루션에서 볼 수있다) 그들의 속임수 호출 : DataGridView.CommitEdit (DataGridViewDataErrorContexts.Commit); 이 커밋
    • 는 DataGridView.CellValueChanged
    • 는,이 이벤트가 당신의 OnCellValueChanged 함수에서
    • 제기 될 때 통지받을 확인 변경된 값의 유효성을 확인하고 활성화 또는 비활성화를 을 결정하는 사건으로 이어질 것입니다 해당 컨트롤 (예 : 버튼).

    OnCellValueChanged 동안 텍스트가 선택되었음을 CommitEdit가 확인한다는 점을 제외하고는 정상적으로 작동합니다. 따라서 64를 입력하려면 6을 입력 할 때 4를 입력 할 때 통보를받습니다. 그러나 6을 선택하면 64를 얻지 못하지만 6은 4로 바뀝니다. 어떻게 든 코드는 값을 해석하기 전에 OnCellValueChanged의 6.

    DataGridView.Selected 속성은 트릭을 수행하지 않으며 텍스트의 선택을 취소하지 않지만 셀의 선택을 취소합니다.

    So : 선택한 셀의 텍스트를 선택 취소하는 방법은 무엇입니까?

  • 답변

    1

    사용자가 현재 셀에 텍스트를 입력 할 때 일부 텍스트를 비활성화해야하는지 확인하기 위해 현재 텍스트를 알 필요가 있다고 생각합니다. 따라서 다음과 같은 접근 방법이 효과적입니다. 당신은 여기에 코드입니다, 편집 컨트롤이 EditingControlShowing 이벤트 핸들러 만 노출 단지 현재의 편집 컨트롤의 TextChanged 이벤트를 처리, 어떤 일을 저지 필요가 없습니다

    //The EditingControlShowing event handler for your dataGridView1 
    private void dataGridView1_EditingControlShowing(object sender, 
                  DataGridViewEditingControlShowingEventArgs e){ 
        var control = e.Control as TextBox; 
        if(control != null && 
         dataGridView1.CurrentCell.OwningColumn.Name == "Interested Column Name"){ 
         control.TextChanged -= textChanged_Handler; 
         control.TextChanged += textChanged_Handler; 
        } 
    } 
    private void textChanged_Handler(object sender, EventArsg e){ 
        var control = sender as Control; 
        if(control.Text == "interested value") { 
        //disable your button here 
        someButton.Enabled = false; 
        //do other stuff... 
        } else { 
        someButton.Enabled = true; 
        //do other stuff... 
        } 
    } 
    

    참고는 내가 사용하는 조건 위의 내용은 원하는대로 수정할 수 있습니다.