2009-11-17 3 views
0

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

Я пробовал обращаться к элементам управления программно, но не могу. Мне просто нужно, чтобы каждый RichTextBox в форме очищался.

Любые образцы кода были бы замечательными, спасибо.

UPDATE: Я написал это:

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

Но по какой-то причине он не работает.

+0

Возможный дубликат [Очистка всех RichTextBoxes из формы (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).

ОБНОВЛЕНИЕ: Это неправильно! Вам не нужно выполнять итерацию вложенных контейнеров ContainerControls. От MSDN:

Используйте свойство Controls для перебора через все элементы управления формы, включая вложенные элементы управления.

Таким образом, приведенный выше код должен работать с удалением части if(control is ContainerControl) {...} else.

0

Какой код вы используете для доступа к управлению RichTextBox программно? Ответ Йоханнеса, приведенный выше, должен работать. Вы можете выполнить цикл через коллекцию элементов управления и проверить типOF() .. и вызвать метод clear()().

0

Это очень странно, я просто попытался воспроизвести проблему с простой формой, содержащей 3 RichTextBoxes. Один из ящиков живет внутри панели, и этот не очистить с помощью метода for each control in controls....

Это странно, потому что, как уже говорили другие, оно должно работать.

Вот мое решение: явным образом рекурсия по всем элементам управления в форме (которая сама по себе является элементом управления). Используйте ClearControl(Me) в вашем коде (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 

Я надеюсь, что это работает для вас.

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