VBA property getletset 可以带多个参数吗? 还有怎么给它们赋值?

VBA property getletset 可以带多个参数吗? 还有怎么给它们赋值?,第1张

<p>属性可以带参数,且可以带任意个数,比如在sheet1的代码中定义以下属性。为了方便起见,我虽然定义了两个参数,但实际只用了一个。注意get

let、set的参数的数量、名称、类型必须一致,对let或set,参数的排列顺序是自己的参数排在前面。
</p>
Dim
arr(1
To
2)
As
String
Public
Property
Get
a(n
As
Integer,
n1
As
Integer)
As
String
a
=
arr(n)
End
Property
Public
Property
Let
a(n
As
Integer,
n1
As
Integer,
ByVal
vNewValue
As
String)
arr(n)
=
vNewValue
End
Property<p>然后在其他地方就可以这样调用属性(注意只用了第一个参数,第二参数随便写的)</p>
Private
Sub
CommandButton1_Click()
Sheet1a(1,
88)
=
"我"
Sheet1a(2,
24)
=
"你"
MsgBox
Sheet1a(1,
32)
MsgBox
Sheet1a(2,
55)
End
Sub<p>这时会d出两次对话框,分别显示


你。
</p>

您好,

这个可以实现,但是必须按照顺序写出参数,请看以下例子:

Personcls

Option Explicit
Private mintAge As Long
Public Property Get Age(ByVal pName As String) As Integer
    Age = mintAge
End Property
' ---------------
' 1 pName  姓名
' 2 intAge 年龄
' ---------------
Public Property Let Age(ByVal pName As String, ByVal intAge As Integer)
    mintAge = intAge
End Property

Modulebas

Option Explicit
Sub Demo1()
    Dim per As New Person
    
    With per
        ' 给姓名为张三的人赋上年龄 36 岁
        Age("张三") = 36
        
        ' 打印张三这个人的年龄
        DebugPrint Age("张三")
    End With
End Sub
Sub Demo2()
    ' 实例化两个人
    Dim per(1) As New Person
    
    per(0)Age("李四") = 36
    per(1)Age("王五") = 32
    
    DebugPrint "李四的年龄是:"; per(0)Age("李四")
    DebugPrint "王五的年龄是:"; per(1)Age("王五")
End Sub

关键注意点就是:

Get、Let 语句中添加的参数位置要对应,比如

Get 语句中的参数 pName 位于第一个,那么 Let 语句中的 pName 也要位于第一个。

PS:上面只是个简单的演示,希望你能够在实际应用中做到举一反三。

命令 set
功能 设置对象的属性。
用法 set(H,'PropertyName',PropertyValue,…) 用属性值'PropertyValue'设置关于用参量H
标志的对象(一个或多个)的属性名'PropertyName'(一个或多个)。H 可以
为一句柄的向量。在这种情形下,命令set 可以设置所有对象的属性值。
set(H,a) 用指定的属性值设置由H 标志的对象的属性。其中a 为一结构数组,该
结构数组的域名为对象的属性名,域名值为相应属性名的属性值。
set(H,pn,pv…) 对由H 指定的所有对象中指定的细胞数组属性名pn 设置为相应
的细胞数组属性值pv。
set(H,pn,<m-by-n cell array>) 对于每m 个图形对象设置n 个属性值,其中
m=length(H),n 为包含属性名的细胞数组pn 中包含的属性名个数。即允许
用户对每一对象的指定的属性设置不同的属性值。
a= set(h) 返回句柄h 中允许用户设置的属性名与可能的属性值。输出参量a 为一
结构数组,其域名为对象的属性名,域名值为相应的属性名对应的属性值。
若没有指定输出参量a,则系统自动将信息显示于屏幕,h 必须为标量。
a= set(0,'Factory') 返回那些用户可以设置缺省值的所有对象的属性名,同时显示
可能的属性值,输出参量a 为一结构数组,其域名为对象的属性名,域名值
为相应的属性名对应的属性值,若没有指定输出参量a,则系统自动将信息
显示于屏幕。
a= set(0,'FactoryObjectTypePropertyName')返回指定根对象(0)类型中指定的属性
名ObjectTypePropertyName 的所有可能的属性值。输入参量是由固定的关键
字Factory、对象类型(如axes)与属性名(如position 等)组成。
a= set(h,'Default') 返回由h 标记的对象上缺省设置的值,其中h 必须是标量。
a= set(h,'DefaultObjectTypePropertyName') 返回指定对象h 的类型中指定的属性
名ObjectTypePropertyName 的所有可能的属性值。输入参量是由固定的关键
字Factory、对象类型(如axes)与属性名(如position 等)组成。

end是你的HelloWorld类里的一个属性,就是通过你的配置文件给你类里面的属性传参数(通过你的构造函数
或是
你是get()和set()方法)
比如
Object
end;
class
HelloWorld{
Object
end;//这个属性最好的私有话的
}

WPF动态改变grid行宽或者列高,需要创建GridLength的动画类。
(一) 创建一个支持GridLength类型的动画类
新建一个继承AnimationTimeLine的类GridLengthAnimation, 简单实现2个依赖属性"From", "To"代码如下:
internal class GridLengthAnimation : AnimationTimeline
{
static GridLengthAnimation()
{
FromProperty = DependencyPropertyRegister("From", typeof(GridLength),
typeof(GridLengthAnimation));
ToProperty = DependencyPropertyRegister("To", typeof(GridLength),
typeof(GridLengthAnimation));
}
public static readonly DependencyProperty FromProperty;
public GridLength From
{
get
{
return (GridLength)GetValue(GridLengthAnimationFromProperty);
}
set
{
SetValue(GridLengthAnimationFromProperty, value);
}
}
public static readonly DependencyProperty ToProperty;
public GridLength To
{
get
{
return (GridLength)GetValue(GridLengthAnimationToProperty);
}
set
{
SetValue(GridLengthAnimationToProperty, value);
}
}
接下来就来依次重载或者实现AnimationTimeLine类的成员,
1 重载CreateInstanceCore, 代码如下:
protected override SystemWindowsFreezable CreateInstanceCore()
{
return new GridLengthAnimation();
}
2 重载GetCurrentValue以返回动画的当前值, 代码如下:
public override object GetCurrentValue(object defaultOriginValue,
object defaultDestinationValue, AnimationClock animationClock)
{
double fromVal = ((GridLength)GetValue(GridLengthAnimationFromProperty))Value;
double toVal = ((GridLength)GetValue(GridLengthAnimationToProperty))Value;
if (fromVal > toVal)
{
return new GridLength((1 - animationClockCurrentProgressValue) (fromVal - toVal) + toVal,
((GridLength)GetValue(GridLengthAnimationFromProperty))GridUnitType);
}
else
return new GridLength(animationClockCurrentProgressValue (toVal - fromVal) + fromVal,
((GridLength)GetValue(GridLengthAnimationToProperty))GridUnitType);
}
3 重写TargetPropertyType 属性以指示相应的动画所生成输出的Type, 代码如下:
public override Type TargetPropertyType
{
get
{
return typeof(GridLength);
}
}
ok, 通过上面的步骤我们已经写好了GridLengthAnimation类, 接下来就是如何使用此类
(二)xaml使用此类, 代码如下:
<WindowResources>
<Storyboard x:Key="sbDock">
<common:GridLengthAnimation BeginTime="00:00:00" StoryboardTargetName="_cellLeft" StoryboardTargetProperty="Width">

</common:GridLengthAnimation>
</Storyboard>
</WindowResources>
<Grid x:Name="LayoutRoot" Background="White">
<GridRowDefinitions>
<RowDefinition/>
</GridRowDefinitions>
<GridColumnDefinitions>
<ColumnDefinition x:Name="_cellLeft" Width="300"/>
<ColumnDefinition x:Name="_cellRight" Width=""/>
</GridColumnDefinitions>
</Grid>
(三)c#使用此类, 代码如下:
Storyboard sbDock = thisFindResource("sbDock") as Storyboard;
if (sbDock != null)
{
SplineDoubleKeyFrame sdKeyFrame1 = new SplineDoubleKeyFrame(TransformRadius,
KeyTimeFromTimeSpan(TimeSpanFromSeconds(1)));
(sbDockChildren[0] as DoubleAnimationUsingKeyFrames)KeyFramesClear();
(sbDockChildren[0] as DoubleAnimationUsingKeyFrames)KeyFramesAdd(sdKeyFrame1);
(sbDockChildren[1] as GridLengthAnimation)From = new GridLength(300, GridUnitTypePixel);
(sbDockChildren[1] as GridLengthAnimation)To = new GridLength(0, GridUnitTypePixel);

sbDockBegin();
}


>

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/13360617.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-21
下一篇 2023-07-21

发表评论

登录后才能评论

评论列表(0条)

保存