以下是我想做的事情:假设我有一个名为" foo.aspx"的页面。这个班叫做" foo"。在页面上有一个名为" bar"的复选框。我想要一个子程序来更新该复选框。
所以我想写的是:
在foo.aspx.vb中:
partial class foo
... whatever ...
dim util as new MyUtility
util.update_checkbox(me)
在MyUtility中
public sub update_checkbox(foo1 as foo)
foo1.bar.checked=true
end sub
但是这并不起作用,因为Visual Studio不接受" foo"作为班级名称。为什么不?是否有一个神奇的命名空间,或者除了说" foo"?
之外我还需要做些什么来识别这个类(是的,我知道在这个简单的例子中,我可以传入复选框,或者将一行代码移动到aspx.vb等等。我真正的问题是在窗体上设置一些控件,我希望能够在具有子类型的类中执行此操作,因此我可以创建正确子类型的实例,然后只调用一个函数并根据子类型设置所有控件。)
更新
NDJ的答案有效。对于其他任何人来说,让我补充一点,我能够做一些比他的建议更灵活的事情。我能够创建一个返回控件本身的属性,而不是控件的某些属性。即:public interface ifoo
readonly property bar_property as literal
end interface
partial class foo
inherits system.web.page
implements ifoo
Public ReadOnly Property bar_property As Literal Implements ITest.bar_roperty
Get
' assuming the aspx page defines a control with id "bar"
Return bar
End Get
End Property
...
dim util=new MyUtility()
util.do_something(me)
...
end class
public class MyUtility
public sub do_something(foo as IFoo)
foo.bar_property.text="Hello world!"
foo.bar_property.visible=true
end sub
end class
这有点痛苦,因为您必须创建一个接口,然后为您希望能够操作的每个控件创建一个属性,但它似乎确实有效。
如果有办法让aspx类本身公开,那么在大多数情况下这都是不必要的包袱。 (如果您有多个页面具有您希望以相同方式操作的控件,则可能很有价值。)但我无法弄清楚如何操作。
答案 0 :(得分:1)
你可以做到这一点,但有一些箍可以跳过。 用你的例子...... 如果您创建一个具有布尔属性的接口,然后在您的页面中实现它,那么您可以通过该界面,更改属性将自动更改复选框。即 接口:
Public Interface IFoo
Property Bar As Boolean
End Interface
实现:
Partial Class _Foo
Inherits Page
Implements IFoo
Public Property Bar As Boolean Implements IFoo.Bar
Get
Return Me.CheckBox1.Checked
End Get
Set(value As Boolean)
Me.CheckBox1.Checked = value
End Set
End Property
然后一些处理程序只需要接受接口:
Public Module SomeModule
Public Sub SetValues(foo As IFoo)
foo.Bar = True
End Sub
End Module
并且页面中的调用者自行传递:
Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
SomeModule.SetValues(Me)
End Sub
答案 1 :(得分:0)
您可以在页面上将复选框公开为公共属性。我不是在VB.net中写的,但在C#中会看起来像这样:
有人可以将其转换为VB.Net吗?
public bool MyCheckBoxSetting
{
get { return mycheckbox.Checked; }
set { mycheckbox.Checked = value; }
}