2009-11-14 2 views
0

У меня есть форма с 25 RichTextBoxes. Мне нужно очистить их все, когда пользователь нажимает кнопку.Очистка всех RichTextBoxes из формы (VB.NET)

Я думаю, что это как-то связано с: Me.Controls.Clear, но я не уверен.

Спасибо за любую помощь. :)

ответ

1

Me.Controls.Clear удалит все элементы управления из коллекции Controls. Вам нужно перебрать все элементы управления в элементах управления, и если элемент управления имеет тип RichTextBox, тогда вызовите некоторый ясный метод для этого элемента управления.

0

Я думаю, вы могли бы использовать LINQ, чтобы выбрать все текстовые поля ... что-то вроде этого (не проверял и с синтаксисом C#)

IEnumerable<RichTextBox> txtBoxes = from txt in form1.Controls 
           where txt is RichTextBox 
           select (RichTextBox) txt; 

, то вы можете сделать петлю Еогеасп очищая его.

foreach(RichTextBoxt in txtBoxes) 
{ 
    // t.clear() ... clear(t) ... t.Text=String.empty ... o whatever you want 
} 
+1

Я думаю, что это пропускает любые richtextboxes, которые находятся в контейнере формы, а не в корне формы. – MarkJ

1

Вы можете сделать это таким образом. Он очищает все текстовые поля в форме. Если вы хотите сохранить любые richtextboxes, вы можете проверить ctl.name.

Dim ctl As Control 
Dim rt As RichTextBox 

For Each ctl In Me.Controls 
    If TypeOf (ctl) Is RichTextBox Then 
    rt = ctl 
    rt.Clear() 
    End If 
Next ctl 
0

Видимо любой from ctrl in form.Controls... подход пропускает любые (богатые) текстовые поля, которые живут в пределах панели/другого контейнера. Это также то, что MarkJ сказал в комментарии к ответу Джонатана.

Вот рутина для явной рекурсии над всеми элементами управления и очистки любого элемента управления, который (1) не имеет детей, и (2) является (богатым) текстовым полем.

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 

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

End Sub 

Pass формы в качестве контроля корня, чтобы начать рекурсию, чтобы очистить все желаемые субэлементы: ClearControl(Me).

Смежные вопросы