我有一个包含25个RichTextBox控件的表单。我需要通过单击按钮清除所有内容(删除其中的所有文本)。
我试过以编程方式访问控件但不能。我只需要清除表单上的每个RichTextBox。
任何代码示例都会很棒,谢谢。
更新:我写了这个:
For Each oControl As Control In Me.Controls
If TypeOf oControl Is RichTextBox Then
oControl.Clear()
End If
Next
但由于某种原因,它不起作用。
答案 0 :(得分:0)
RichTextBox.Clear()
方法怎么样?
您可以遍历表单中的每个控件(使用MyBase.Controls
)并检查它是否为RichTextBox
,然后在其上调用Clear()
方法。
答案 1 :(得分:0)
表单的控件可以通过Controls属性获得。问题是这些控件中的一些可能是ContainerControls,而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:
使用Controls属性进行迭代 通过表格的所有控制, 包括嵌套控件。
因此,上述代码应该可以删除if(control is ContainerControl) {...} else
部分。
答案 2 :(得分:0)
您使用什么代码以编程方式访问RichTextBox控件?约翰内斯给出的答案应该有效。你可以通过控件集合循环并检查typeOf()..并调用clear()方法()。
答案 3 :(得分: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
我希望这适合你。