我正在使用VB制作一个文件编辑系统,允许用户在Notpad ++等多个标签上编辑多个文件。
虽然我遇到了轻微的障碍。看作标签不包含文字,我在创建时为每个标签添加了一个文本框。
对于加载文件,我想检查当前标签的文本框是否为空,这样我最终不会将加载的文件添加为新选项卡,这只会创建混乱(就像单词打开文件时一样,它检查是否当前文档是未加载的文件,在加载前没有文本。)
问题是,如何使用我尚未添加的标签进行检查? (即在程序运行时添加,而不是在设计模式下添加)
如果有人知道答案,我们将不胜感激。
答案 0 :(得分:2)
我不知道VB.NET,但我在C#中创建了这段代码,检查TabPage
是否包含TextBox
为空。如果您知道该语言,我认为将其翻译成VB.NET很容易。
这是检查TabPage是否包含空TextBox的函数。该函数接收TabPage作为其参数,并返回true
或false
。
private bool ContainsEmptyTextBox(TabPage tp)
{
bool foundTextBox = false;
bool textBoxIsEmpty = false;
foreach (Control c in tp.Controls)
{
if (c is TextBox)
{
foundTextBox = true;
TextBox tb = c as TextBox;
if (String.IsNullOrEmpty(tb.Text))
{
textBoxIsEmpty = true;
}
break;
}
}
if (foundTextBox == true && textBoxIsEmpty == true)
return true;
else
return false;
}
以下是如何使用该函数迭代TabControl
中的所有选项卡,并查看哪一个包含空TextBox:
private void button1_Click(object sender, EventArgs e)
{
foreach (TabPage tp in tabControl1.TabPages)
{
if (ContainsEmptyTextBox(tp))
{
// This tabpage contains an empty textbox
MessageBox.Show(tabControl1.TabPages.IndexOf(tp) + " contains an empty textbox");
}
}
}
编辑:我使用this site自动将C#代码转换为VB.NET。
Private Function ContainsEmptyTextBox(tp As TabPage) As Boolean
Dim foundTextBox As Boolean = False
Dim textBoxIsEmpty As Boolean = False
For Each c As Control In tp.Controls
If TypeOf c Is TextBox Then
foundTextBox = True
Dim tb As TextBox = TryCast(c, TextBox)
If [String].IsNullOrEmpty(tb.Text) Then
textBoxIsEmpty = True
End If
Exit For
End If
Next
If foundTextBox = True AndAlso textBoxIsEmpty = True Then
Return True
Else
Return False
End If
End Function
Private Sub button1_Click(sender As Object, e As EventArgs)
For Each tp As TabPage In tabControl1.TabPages
If ContainsEmptyTextBox(tp) Then
' This tabpage contains an empty textbox
MessageBox.Show(tabControl1.TabPages.IndexOf(tp) & " contains an empty textbox")
End If
Next
End Sub
答案 1 :(得分:1)
很久以前我还不得不用C#做一个Notepad ++克隆,需要支持在标签中编辑多个文件。我记得我的表单中有一个List<string> OpenFiles
成员,其中包含打开文件的文件名。每次我打开一个新文件,我都会这样做:
OpenFiles
通过这种方式,OpenFiles
列表与TabControl中的选项卡同步。例如,OpenFiles
中的第3项是TabControl中第4个选项卡的文件名。
当然,当我打开一个新文件时,我需要先检查文件是否已打开。如果它之前打开过,我切换到它的标签;如果没有,我会打开一个新标签。
拥有OpenFiles
成员,这很容易。打开文件的完整算法是:
OpenFiles
列表OpenFiles
中),并且其在OpenFiles
中的位置为idx
(例如),则激活idx
标签OpenFiles
中不存在该文件
OpenFiles
关闭文件时(例如关闭idx
标签),我这样做了:
idx
标签
idx
列表OpenFiles
项
我认为您可以在应用程序中应用相同的逻辑。