0

我正在使用 VB 制作一个文件编辑系统,允许用户在多个选项卡上编辑多个文件,例如 Notpad++。

不过,我遇到了一个小障碍。由于选项卡不包含文本,因此我在创建时为每个选项卡添加了一个文本框。

对于加载文件,我想检查当前选项卡的文本框是否为空,因此我最终不会将加载的文件添加为新选项卡,这只会造成混乱(例如当 word 打开文件时,它会检查当前文档是加载前没有文本的未保存文件。)

问题是,如何使用尚未添加的选项卡进行检查?(即将在程序运行时添加,而不是在设计模式下)

如果有人知道答案,将不胜感激。

4

2 回答 2

2

我不知道 VB.NET,但我在 C# 中编写了这段代码,它检查 a 是否TabPage包含TextBox空的 a。如果您知道那种语言,我认为将它翻译成 VB.NET 很容易。

这是检查 TabPage 是否包含空 TextBox 的函数。该函数接收 TabPage 作为其参数并返回trueor 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;
}

以下是如何使用该函数遍历 a 中的所有选项卡TabControl并查看哪个选项卡包含空文本框:

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");
        }
    }
}

编辑:我使用这个站点将 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
于 2012-05-06T09:12:41.180 回答
1

很久以前,我还不得不在 C# 中制作 Notepad++ 克隆,它需要支持在选项卡中编辑多个文件。我记得List<string> OpenFiles我的表单中有一个成员,其中包含打开文件的文件名。每次我打开一个新文件时,我都会这样做:

  • 将新项目添加到OpenFiles
  • 使用文本框创建一个新选项卡并将其添加到 TabControl

通过这种方式,OpenFiles列表与 TabControl 中的选项卡同步。例如,第 3 项OpenFiles是 TabControl 中第 4 个选项卡的文件名。

当然,当我打开一个新文件时,我需要检查该文件之前是否打开过。如果之前打开过,我切换到它的标签;如果没有,我会打开一个新标签。

有了OpenFiles会员,这很容易。打开文件的完整算法是这样的:

  • OpenFiles通过搜索列表检查文件是否已打开
  • 如果文件已经打开(如果它存在于 中OpenFiles),并且它的位置OpenFilesidx(例如),则激活第idxth 选项卡
  • 如果文件不存在于OpenFiles
    • 将其添加到OpenFiles最后
    • 将带有文本框的新选项卡添加到 TabControl 的末尾

关闭文件时(例如关闭idxth 选项卡),我这样做了:

  • 检查文件是否已保存,如果没有则提示用户是否要保存(是/否/取消消息框)。
    • 如果他选择是,则保存并继续
    • 如果他选择否,则不要保存并继续
    • 如果他选择取消,则中止操作(返回)
  • idx从 TabControl 中删除第一个选项卡
  • 删除列表idx中的第一项OpenFiles

我认为您可以在您的应用程序中应用相同的逻辑。

于 2012-05-06T07:12:10.720 回答