2009-11-17 3 views
0

25 개의 RichTextBox 컨트롤로 설정된 양식이 있습니다. 버튼 클릭으로 모든 내용을 지울 필요가 있습니다 (내부의 모든 텍스트를 제거하십시오).양식의 모든 RichTextBox 지우기 (VB.NET)

나는 프로그램에서 컨트롤에 액세스하려고했지만 할 수 없었습니다. 폼에있는 모든 RichTextBox를 지울 필요가 있습니다.

모든 코드 샘플이 좋을 것입니다. 감사합니다.

UPDATE :이 쓴 :

For Each oControl As Control In Me.Controls 
     If TypeOf oControl Is RichTextBox Then 
      oControl.Clear() 
     End If 
    Next 

그러나이 작동하지 않는 몇 가지 이유

.

+0

가능한 복제본 [서식에서 모든 RichTextBox를 지우는 중 (VB.NET)] (http://stackoverflow.com/questions/1734799/clearing-all-richtextboxes-from-a-form-vb-net) –

답변

0

RichTextBox.Clear() 방법은 어떻습니까?

폼의 모든 컨트롤 (MyBase.Controls 사용)을 반복하고 해당 컨트롤이 RichTextBox인지 확인한 다음 Clear() 메서드를 호출 할 수 있습니다.

0

양식의 컨트롤은 Controls 속성을 통해 얻을 수 있습니다. 문제는 이러한 컨트롤 중 일부는 다른 컨트롤을 포함 할 수있는 ContainerControls가 될 수 있다는 것입니다.

다음은 C#에서 대략적인 예입니다 (죄송합니다, 제가 VB 유창 아니에요, 난 당신이 어쨌든 아이디어를 얻을 희망) :

void ClearRichTextBoxes(ContainerControlcontainer) 
{ 
    foreach(var control in Controls) { 
     if(control is ContainerControl) { 
      ClearRichTextBoxes(control); 
     } else if(control is RichTextBox) { 
      ((RichTextBox)control).Clear(); 
     } 
    } 
} 

당신은 ClearRichTextBoxes(form)처럼 호출 할 것입니다.

업데이트 : 잘못된 것입니다! throgh 중첩 된 ContainerControls를 반복 할 필요가 없습니다. MSDN에서 :

중첩 된 컨트롤을 포함하여 형태, 의 모든 컨트롤을 통해 를 반복하는 컨트롤 속성을 사용합니다.

따라서 위 코드는 if(control is ContainerControl) {...} else 부분을 제거해야합니다.

0

RichTextBox 컨트롤에 프로그래밍 방식으로 액세스하는 데 사용하는 코드는 무엇입니까? 위에 주어진 요하네스의 대답이 효과가 있습니다. controls 컬렉션을 반복하고 typeOf() ..를 확인하고 clear() 메서드()를 호출 할 수 있습니다.

0

이것은 매우 이상합니다. 3 개의 RichTextBox를 포함하는 간단한 양식으로 문제를 재현 해 보았습니다. 상자 중 하나가 패널 내부에 있으며이 for each control in controls... 메서드로이 아닙니다.

다른 사람들이 이미 말한 것처럼 작동해야하기 때문에 이상합니다.

내 솔루션은 다음과 같습니다. 폼의 모든 컨트롤 (컨트롤 자체도 마찬가지 임)을 명시 적으로 반복합니다. 코드에 ClearControl(Me)을 사용하십시오 (폼은 컨트롤입니다).

구현 :

'If a control has a collection of sub-controls, it's a container. 
'In this case: recurse over its children until you hit a child without sub-controls. 
'Then check if it's a (rich)TextBox and clear. 
Private Sub ClearControl(ByVal ctrl As Control) 

    If ctrl.Controls.Count > 0 Then 
     For Each subCtrl As Control In ctrl.Controls 
      ClearControl(subCtrl) 
     Next 
    End If 

    If TypeOf ctrl Is RichTextBox Then 
     DirectCast(ctrl, RichTextBox).Clear() 
    End If 

    'You can clear other types of controls in here as well 
    If TypeOf ctrl Is TextBox Then 
     DirectCast(ctrl, TextBox).Clear() 
    End If 
    'etcetera... 

End Sub 

나는이 당신을 위해 일하는 바랍니다.

관련 문제