我的理解是,这不能做,而是选择了一种公共方法,可以完成我需要的特定工作,而不会暴露我的控制并保持私密性。因此,通过公共属性暴露我想要访问的控件的特定属性,以便进行简单的dsicrete set和get操作也没关系。
网址:Unable to access Winforms control in a class
“此外,请确保您的控件是公开的,或者更好地向表单添加可用于间接操作控件的公共方法。”
以上引用对我来说没有多大意义......如果我无法从另一个winform类中看到目标类控件和成员,那么我就完全陷入困境,试图理解发生了什么错了??? =(
任何一种方法都没有结果......我的目标控制是私密的,我暴露的属性是公开的,我暴露的方法也是公开的......我做错了什么????线程没有这么难......“?:”@#$%!!!
*******请尽可能让我成为一个白痴!!!
答案 0 :(得分:0)
保持您的控件私密。您不应该从表单外部直接操作表单上的控件。
所以
例如,如果要禁用表单上的控件,则需要编写如下代码:
form.DisableSomeControls();
// Do some work.
form.EnableSomeControls();
你实现这些方法有点像这样:
class MyForm : Form
{
public void DisableSomeControls()
{
this.textbox1.Enabled = false;
this.btnOK.Enabled = false;
}
}
我希望你明白这一点。
答案 1 :(得分:0)
这个想法是从表单提供的功能中隐藏实现。例如,如果您有文本框控件或windowTitle,并且您希望调用者设置的值,则最好使用实例化表单的属性或方法间接设置值,这样如果实现更改,则调用例程没有。
因此调用表单创建目标表单的实例,并使用朋友/公共属性或方法对其进行更改。
Public Class frmCaller
Private WithEvents _edit As frmEdit
Private Sub editCell()
If _edit Is Nothing Then
_edit = New frmEdit
_edit.MdiParent = Me.MdiParent
End If
_edit.init<params>)
If Not _edit.isNothing Then
_edit.Show()
_edit.WindowState = FormWindowState.Maximized
_edit.BringToFront()
End If
End Sub
公共类frmEdit 朋友Sub init()
答案 2 :(得分:0)
感谢您的回复。我按照你的描述实现了。我的目标类是公共的,它的控件是私有的,我已经暴露了一些属性和方法来为我做一些工作。问题是当我在一个调用类中从内部实例化类时,intellisense不向我显示除FORM相关成员之外的任何内容,而不是我的类成员。这就是我一直在摔倒的地方。我确实在调用类中实例化类之后,我将有机会查看我故意设置的属性和方法。事情是我看不到他们= *(