我有一个在单选按钮检查事件下执行的功能,但它必须只执行一次。在随后的单选按钮检查事件中,不应调用我的函数。
void rb_CheckedChanged(x, y)
{
LoadSomeData(); //need to load only once.
// rest of the code; to be executed every single time..
}
注意:
我希望LoadSomeData()
仅在单选按钮事件下执行。
我可以设置一个整数成员变量,并计数++,n检查是否== 1等。或者布尔标志。那不是我想要的。
谢谢..
答案 0 :(得分:1)
您可以设置hidden field并将其用作标志,以确定是否应再次运行LoadSomeData
。类似的东西:
void rb_CheckedChanged(x, y)
{
if (hiddenField.Value == "False")
{
LoadSomeData(); //need to load only once.
hiddenField.Value = true.ToString();
}
else
{
// Do nothing.
}
// rest of the code; to be executed every single time..
}
在您的页面中:
<asp:HiddenField ID="hiddenField" Value="False" />
答案 1 :(得分:1)
我认为选项2是你最好的选择,周围有一个粘性的bool。
private bool stickyFlag = true;
void rb_CheckedChanged(x,y)
{
if (true == stickyFlag)
{
LoadSomeData();
stickyFlag = false;
}
....
// rest of the code; to be executed every single time..
}
答案 2 :(得分:1)
你可以做的是创建一个你想在事件中调用的函数名列表,然后从列表中获取方法名,使用反射调用你感兴趣的方法,然后从列表中删除该方法名...下次,当再次调用该事件时,该方法将不会在它不在列表中之前执行..类似于:
List<string> listMethod = new List<string>();
listMethod.Add("LoadSomeData");
然后
void rb_CheckedChanged(x, y)
{
string methodName = listMethod[0];
Type.InvokeMember(
methodName,
BindingFlags.InvokeMethod | BindingFlags.Public |
BindingFlags.Static,
null,
null,
null);
listMethod.Clear(); //or remove what ever you want
}
您可以从http://www.codeproject.com/KB/cs/CallMethodNameInString.aspx
获取有关动态方法调用的信息答案 3 :(得分:1)
答案 4 :(得分:1)
我会选择第二个选项,但你可以使用代表:
public event Action doLoadSomeData;
void onLoad(sender, args)
{
doLoadSomeData += LoadSomeData();
}
void rb_CheckedChanged(x, y)
{
if (doLoadSomeData != null)
{
doLoadSomeData(); //need to load only once.
}
doLoadSomeData = null;
// rest of the code; to be executed every single time..
}