将WinForm控件暴露给调用类,也是一个WinForm?

时间:2009-08-24 21:58:01

标签: winforms controls

我的理解是,这不能做,而是选择了一种公共方法,可以完成我需要的特定工作,而不会暴露我的控制并保持私密性。因此,通过公共属性暴露我想要访问的控件的特定属性,以便进行简单的dsicrete set和get操作也没关系。

网址:Unable to access Winforms control in a class

“此外,请确保您的控件是公开的,或者更好地向表单添加可用于间接操作控件的公共方法。”

以上引用对我来说没有多大意义......如果我无法从另一个winform类中看到目标类控件和成员,那么我就完全陷入困境,试图理解发生了什么错了??? =(

任何一种方法都没有结果......我的目标控制是私密的,我暴露的属性是公开的,我暴露的方法也是公开的......我做错了什么????线程没有这么难......“?:”@#$%!!!

*******请尽可能让我成为一个白痴!!!

3 个答案:

答案 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相关成员之外的任何内容,而不是我的类成员。这就是我一直在摔倒的地方。我确实在调用类中实例化类之后,我将有机会查看我故意设置的属性和方法。事情是我看不到他们= *(