【问题标题】:Reference to control of TableLayoutPanel inside split container拆分容器内 TableLayoutPanel 控件的引用
【发布时间】:2016-09-01 17:21:19
【问题描述】:

如何在我的表单的TableLayoutPanel 内引用Datagridview 控件,它在SplitContainer Panel1 内?我需要在另一个表单的代码中隐藏这个Datagrid

所以,设计是:Form -->Split Container--> TableLayoutPanel --> Datagridview

任何帮助表示赞赏!

【问题讨论】:

  • I need to hide this Datagrid in code from another form 或者您可以向表单添加一个方法,例如 HideTheDGV() 调用它并让表单处理自己的控件
  • 嗨 Plutonix。我正在努力解决这个问题 - 让我解释一下。 1st,我有一个 Form1,我在 datagridview 中显示记录,在该 datagrid 可见 = false 之前。 2,当datagrid有一些记录时,我打开Form2,从这里我必须确定Datagrid是否可见=真。问题是“Form1.Datagridview1.Visible=True”没有返回任何东西,我认为是因为它引用了 Form1 类并且没有打开 Form1。考虑到我需要保持此状态,因为我重新打开 Form2 并再次需要此 Opened Form1 值,我该怎么做才能引用 Opened Form1?

标签: vb.net datagridview


【解决方案1】:

如果您将DataGridView 与设计器一起添加,您可以简单地通过FormReference.DataGridViewName 调用它。

您只需确保将设计器中的GenerateMember 属性设置为True,即其Default Value,并将修饰符设置为允许公共访问的内容。

【讨论】:

  • 谢谢,但我有一个问题。默认情况下,TableLayout 为 visible=False。单击按钮后,它变得可见。然后在 Form2 中单击后,这不起作用“如果 Form1.DataGridView1.Visible = True Then” - 如果我更改为 visible=false,则代码有效。为什么?
  • 这对我不起作用。不知何故,代码只识别可见 = false,但不是,我可以看到 datagridview。我不知道为什么会这样。
【解决方案2】:

我找到了答案,并没有我想的那么简单。

  1. VB.NET 中没有“自动表单集合”。

如果控件在Form1上,那么当你打开Form2时,它需要有 一种查找 Form1 的 Open 版本的方法。仅指 Form1 确实 没有对 Open Form1 的引用,只是对 Form1 类的引用。

所以,Form2 需要一个引用打开的 Form1 的变量:

  Public OpenedForm1 as Form1

那么要打开Form2,Form1需要有:

Dim f as new Form2
f.OpenedForm1 = Me
f.show

然后 Form2 将引用 Form1 上打开它的控件:

Me.OpenedForm1.NameOfControl

如果有人有更好的做法,请告诉我 - 我不太喜欢它。

【讨论】:

  • There is not an 'automatic form collection' in VB.NET 有,但有时会忘记表格:Application.OpenForms()。最好在代码中保留表单引用。
  • 我也试过这个,但是如何检查你需要的控制?据我所知,您只能检查表单是否以这种方式打开。
猜你喜欢
  • 2020-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-24
  • 2019-03-24
  • 2016-06-14
相关资源
最近更新 更多