Vb.net 无法引用文本框,因为我没有';我还没有创造它

Vb.net 无法引用文本框,因为我没有';我还没有创造它,vb.net,Vb.net,我正在使用VB制作一个文件编辑系统,允许用户在多个选项卡上编辑多个文件,如Notpad++ 不过我碰到了一个小小的障碍。由于选项卡不包含文本,我在创建时为每个选项卡添加了一个文本框 对于加载文件,我想检查当前选项卡的文本框是否为空,这样我就不会将加载的文件添加为新选项卡,这只会造成混乱(比如word打开文件时,它会检查当前文档是否为未保存的文件,加载前没有文本) 问题是,我如何用我还没有添加的标签检查这个问题?(Ie将在程序运行时添加,而不是在设计模式下) 如果有人知道答案,我将不胜感激。很久以

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

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

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

问题是,我如何用我还没有添加的标签检查这个问题?(Ie将在程序运行时添加,而不是在设计模式下)


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

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

  • 将新项目添加到
    OpenFiles
  • 创建一个带有文本框的新选项卡,并将其添加到TabControl
通过这种方式,
OpenFiles
列表与TabControl中的选项卡同步。例如,
OpenFiles
中的项目3是TabControl中第四个选项卡的文件名

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

拥有
OpenFiles
成员,这很容易。打开文件的完整算法如下:

  • 通过搜索
    OpenFiles
    列表,检查文件是否已打开
  • 如果文件已经打开(如果它存在于
    OpenFiles
    中),并且它在
    OpenFiles
    中的位置是
    idx
    (例如),则激活
    idx
    选项卡
  • 如果文件不存在于
    OpenFiles
    • 将其添加到末尾的
      OpenFiles
    • 将带有文本框的新选项卡添加到TabControl的末尾
关闭文件时(例如关闭
idx
th选项卡),我执行了以下操作:

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

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

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

  • 将新项目添加到
    OpenFiles
  • 创建一个带有文本框的新选项卡,并将其添加到TabControl
通过这种方式,
OpenFiles
列表与TabControl中的选项卡同步。例如,
OpenFiles
中的项目3是TabControl中第四个选项卡的文件名

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

拥有
OpenFiles
成员,这很容易。打开文件的完整算法如下:

  • 通过搜索
    OpenFiles
    列表,检查文件是否已打开
  • 如果文件已经打开(如果它存在于
    OpenFiles
    中),并且它在
    OpenFiles
    中的位置是
    idx
    (例如),则激活
    idx
    选项卡
  • 如果文件不存在于
    OpenFiles
    • 将其添加到末尾的
      OpenFiles
    • 将带有文本框的新选项卡添加到TabControl的末尾
关闭文件时(例如关闭
idx
th选项卡),我执行了以下操作:

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

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

我不知道VB.NET,但我用C语言编写了这段代码,它检查
选项卡页
是否包含一个空的
文本框
。我认为如果你懂VB.NET语言,那么把它翻译成VB.NET是很容易的

下面是检查选项卡页是否包含空文本框的函数。该函数接收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
中的所有选项卡,并查看哪个选项卡包含空文本框:

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

我不知道VB.NET,但我用C语言编写了这段代码,它检查
TabPage
是否包含一个
TextBox
为空。我认为如果你懂VB.NET语言,那么把它翻译成VB.NET是很容易的

下面是检查选项卡页是否包含空文本框的函数。该函数接收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
中的所有选项卡,并查看