你可以猜到,我对.NET很陌生,只想在另一个表单上引用一个控件。
通常我会做Form.Control.Property,但这不起作用,我通过Google找到的每个例子都不适用于我。
公共课等似乎过于复杂。
有更简单的方法吗?我已准备好放弃,此时只使用全局变量。
我有包含我想要引用的控件的表单,frmGenerate有一个名为txtCustomerNo的文本框。
从这个表单到按钮的click事件,我想显示另一个表单frmCustomers,并让该表单引用txtCustomerNo中的值。
frmCustomers.ShowDialog()
它必须是简单的,我只是没有把握。
答案 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()
修改强> 我在这里为你构建了一个示例项目:
答案 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 =已记录
非常简单且有效。