我有一个全局变量,用于检查何时填写我无法上班的表格。我尝试仅在模块中进行设置,但似乎不起作用。通过将其放入模块中,我已经使其变得复杂了。
internal class EnhancedListView : ListView
{
internal event ScrollEventHandler ScrollEnded,
ScrollStarted;
const int WM_NOTIFY = 0x004E;
internal EnhancedListView()
{
Scroll += EnhancedListView_Scroll;
}
ScrollEventType mLastScroll = ScrollEventType.EndScroll;
private void EnhancedListView_Scroll(object sender, ScrollEventArgs e)
{
if (e.Type == ScrollEventType.EndScroll)
{
ScrollEnded?.Invoke(this, e);
}
else if (mLastScroll == ScrollEventType.EndScroll)
{
ScrollStarted?.Invoke(this, e);
}
mLastScroll = e.Type;
}
internal event ScrollEventHandler Scroll;
protected virtual void OnScroll(ScrollEventArgs e)
{
Scroll?.Invoke(this, e);
}
protected override void WndProc(ref Message m)
{
base.WndProc(ref m);
if (m.Msg == 0x115)
{
// WM_VSCROLL
OnScroll(
new ScrollEventArgs(
(ScrollEventType)(m.WParam.ToInt32() & 0xffff),
0
)
);
}
else if (m.Msg == WM_NOTIFY)
{
// What should I put here?
}
}
}
我认为,由于无法正常传递值,我可以调用一个函数来更改它,然后调用GetFlag。仍然不起作用。
我尝试使用 Option Compare Database
Public ChangeFlag As Boolean
Public Function SetFlagTrue()
ChangeFlag = True
End Function
Public Function SetFlagFalse()
ChangeFlag = False
End Function
Public Function GetFlag() As Boolean
GetFlag = ChangeFlag
End Function
,但是在尝试更改该值时出现错误。我在这里指的是GetFlag函数,但它似乎不起作用。
Call SetFlagTrue
我也不认为它们起作用。
答案 0 :(得分:0)
您应该使用属性而不是函数
Option Compare Database
Option Explicit
Private DataEntered As Boolean
Public Property Get FormHasData() As Boolean
FormHasData = DataEntered
End Property
Public Property Let FormHasData(ByVal HasData As Boolean)
DataEntered = HasData
End Property
Private Sub TestFormHasData
FormHasData = True
Debug.Print FormHasData
FormHasData = False
Debug.Print FormHasData
End Sub
通过将DataEnterd
设置为私有,只能由其Getter / Letter访问。属性的优点是此任务只有一个标识符。现在,您可以将Letter设置为私有,以防止在模块外部进行更改,或者将Getter设置为私有,以防止从外部对其进行访问。
这与您的代码有所不同,ChangeFlag
可以从任何地方访问。