从另一个表单引用一个表单上的控件

时间:2010-12-17 14:40:15

标签: vb.net winforms

你可以猜到,我对.NET很陌生,只想在另一个表单上引用一个控件。

通常我会做Form.Control.Property,但这不起作用,我通过Google找到的每个例子都不适用于我。

公共课等似乎过于复杂。

有更简单的方法吗?我已准备好放弃,此时只使用全局变量。

我有包含我想要引用的控件的表单,frmGenerate有一个名为txtCustomerNo的文本框。

从这个表单到按钮的click事件,我想显示另一个表单frmCustomers,并让该表单引用txtCustomerNo中的值。

frmCustomers.ShowDialog()

它必须是简单的,我只是没有把握。

8 个答案:

答案 0 :(得分:4)

在包含您想要引用的控件的表单中:

Public Property CustomerNo() As TextBox
    Get
        Return txtCustomerNo
    End Get
    Set(ByVal Value As TextBox)
        txtCustomerNo = Value
    End Set
End Property

在您希望引用控件的表单中:

Dim CustomerNo as string = _sourceForm.CustomerNo.Text

这样做设计很糟糕,但这是最简单的方法 - 并且应该让你顺利进行。

如果您只对文本框中输入的值感兴趣,那么以下内容可能更好:

Public ReadOnly Property CustomerNo() As String
    Get
        Return txtCustomerNo.Text
    End Get
End Property

以上将要求第二个表单引用第一个表单的实际实例。将以下内容添加到第二个表单:

Private _sourceForm as frmGenerate

Public Property SourceForm() As frmGenerate 
    Get
        Return _sourceForm
    End Get
    Set(ByVal Value As frmGenerate)
        _sourceForm = Value
    End Set
End Property

现在,您可以执行以下操作来处理第二个表单的创建和启动:

Dim customersForm as new frmCustomers
customersForm.SourceForm = Me
customersForm.Show()    

修改 我在这里为你构建了一个示例项目:

http://www.yourfilelink.com/get.php?fid=595015

答案 1 :(得分:1)

您需要确保添加的属性为public,否则其他类无法访问这些属性。

答案 2 :(得分:1)

您应该能够在表格公开之外做出任何您需要引用的内容。在许多情况下,这就是所需要的。

有时,创建单独的公共属性或方法很有用。并有方法照顾细节。例如,如果您只想能够访问文本,则可以创建类似这样的属性(在C#中)。

public string CustomerNo
{
    get
    {
        return txtCustomerNo.Text;
    }
    set
    {
        txtCustomerNo.Text = value;
    }
}

答案 3 :(得分:1)

建立一个私人领域。右键单击“Refactor”,选择“Encapsulate Field”。这将自动为该字段创建公共属性。

另一种方法是重载公共构造函数。

public CustomersForm(string property1, string property2...)
{
     //Get the properties and do what is necessary.
}

//Parent Form

CustomersForm frmCustomers = new CustomersForm(property1, property2..);

将完整控件发送到另一个表单也不是一个好策略。仅通过公共属性/构造函数共享必要的字段。

答案 4 :(得分:1)

更好的方法是传递参考 控制你的班级,改变它的任何属性 用你的逻辑,然后“发送”回调用表格。

这里的技巧是确保类代码正在使用 被调用类中的“ByRef”参数,否则这将无效。 在内存中,您引用相同的控件而不创建新的 它的属性,这减少了代码蠕变。

例如,您可以在此处禁用类代码中的按钮。

在表单中,调用您的类并将其传递给按钮(或任何其他控件):

' new the class your calling
Dim CallClass As New ProgramCall
' pass the control as a by reference argument
CallClass .SetUpTheCall("HOURLY", btnSendToBank)  

然后,在你的课堂上:

Public Sub SetUpTheCall(ByVal ParmToPass As String, ByRef btnSendToBank As Button)

' your class logic goes here...

' disable the send button on the calling form
btnSendToBank.Enabled = False

' change the button text on the calling form
btnSendToBank.text = "Disabled"

答案 5 :(得分:1)

My.Forms.frmGenerate.txtCustomerNo.Text

答案 6 :(得分:0)

虽然您可以在第二个表单上创建一个将返回所需数据的属性,但您可以轻松更改该控件的修饰符属性。默认情况下,控件的修饰符是私有的,因此除了当前表单之外的任何其他内容都无法访问。单击该控件,然后找到Modifier属性。将其设置为Public,您就可以从表单外部访问它,例如:

Dim f As New SecondForm
f.FirstNameTextBox.Text = "Bob"

答案 7 :(得分:0)

我这样登录后,将登录到下一个表单上的文本框的人的姓名保存起来。 我的登录按钮有最后一行: 我。隐藏()(不是我。关闭()) Admin.Show() 结束

当用户输入正确的用户名和密码时,它会隐藏登录表单并打开下一页,Admin.vb

在Admin.vb页面的Admin_Load中,作为我输入的最后一行:

Dim logs As String logged = Login.txtUser.Text Login.Close()。 '关闭隐藏的login.vb' 结束子

因此,用户按下登录按钮,它会在txtUser文本框中隐藏具有我想要的值的登录表单。然后它会打开Admin页面。 Admin页面的load事件从txtUser文本框中的隐藏登录页面获取我的值,并将其放入参数“logged”中。 抓取值后,它会关闭登录页面并离开子站点。这一切都发生在眨眼之间! 现在我想在任何地方使用登录人员的姓名,比如在文本框中我只使用“已登录”。

txtchangesby.Text =已记录

非常简单且有效。