【问题标题】:Disable Controls if the Control Name is in the Datagridview如果控件名称在 Datagridview 中,则禁用控件
【发布时间】:2023-03-23 12:08:01
【问题描述】:

我希望这个问题能让我了解我的问题,不要让我发表负面帖子。

我会尽力解释这个问题。

在这里。

我有一个 datagridview,它看起来像这样

我有一个MainForm,带有以下控件,它们是

PictureBox2
PictureBox3
PictureBox4
PictureBox5
PictureBox6
PictureBox7

正如您在上图中看到的那样,Control Name 列与我的MainForm 中的名称相同

据我所知,在 VB.Net 中,All 或如果不是 Most 的控件 Enable 是 True 和 False,正如您在上图中看到的那样Access 列的值为 True 和 False。

现在这是我的问题:如何在 MainForm 中找到控件并根据 Datagridview 启用\禁用它?我的意思是根据Datagridview中的内容找到控件名称并启用禁用它。

我希望你明白我的意思,如果我是正确的,代码可能看起来像这样

  Sub MenuControls()
        'Sample but not working
        For Each row As DataGridViewRow In DataGridView1.Rows
            "Control Name".Enabled = "Access"
        Next
    End Sub

【问题讨论】:

  • Me.Controls.Find
  • @AndrewMortimer 很难理解 :(
  • 像这样: MainForm.Controls.Find("PictureBox7") 。你可以在这里找到一些文档E:msdn.microsoft.com/query/…

标签: vb.net winforms datagridview user-controls


【解决方案1】:

使用列的名称作为 Cells 集合中的索引器来访问行单元格的值。然后可以使用Form(Me)控件集合找到相关控件

Public Sub EnablePictures()
    Dim Enable As Boolean
    For Each row As DataGridViewRow In DataGridView1.Rows
        Enable = Convert.ToBoolean(row.Cells("Access").Value)
        Dim ctrl = Me.Controls(row.Cells("Control Name").Value)
        if ctrl IsNot Nothing Then
            ctrl.Enabled = Enable
        End If
    Next
End Sub

这段代码做了很多假设。首先,您的列应该完全按照图像中显示的方式命名(我看到的是标题标题,而不是真正的列名),然后我假设您将 PictureBoxes 作为表单控件集合的子项。如果它们包含在不同的控件(组框、面板...)中,则应使用该容器的 Controls 集合。

我已经根据之前的代码创建了一个 Sub 来帮助您解决下面 cmets 中所述的问题。通过这种方式,您可以在需要时调用此子。因此,如果您动态添加 picurebox 控件,您可以在将它们添加到表单后立即调用 sub

【讨论】:

  • 哇,非常感谢:D
  • 先生,我有一个问题,如果找不到控件,您认为它会出错吗?可以说表单尚未打开。类似的东西
  • 是的,如果控件还没有在控件集合中,你会得到一个异常。您可以解决将 Dim ctrl = Me.Controls("....") 分配给临时变量的问题,然后使用 If ctrl IsNot Nothing Then 运行启用代码
  • 我不知道该怎么做,我觉得太难了:(
猜你喜欢
  • 1970-01-01
  • 2022-11-12
  • 1970-01-01
  • 2015-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多