Очистка всех RichTextBoxes из формы (VB.NET) - PullRequest
0 голосов
/ 14 ноября 2009

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

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

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

Ответы [ 4 ]

1 голос
/ 15 ноября 2009

Вы можете сделать это таким образом. Он очищает все текстовые поля в форме. Если вы хотите сохранить какие-либо 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
1 голос
/ 14 ноября 2009

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

0 голосов
/ 18 ноября 2009

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

Вот процедура для явного рекурсивного обхода всех элементов управления и очистки любого элемента управления, который (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

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

0 голосов
/ 14 ноября 2009

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

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

тогда вы можете выполнить цикл foreach, очищая его.

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