使用sql server的c#.net winform应用程序中的事件处理
我有一个带有SQLusers列表的组合框,这些用户具有预先授予的权限。 带有列使用sql server的c#.net winform应用程序中的事件处理,c#,.net,sql,sql-server,sql-server-2005,C#,.net,Sql,Sql Server,Sql Server 2005,我有一个带有SQLusers列表的组合框,这些用户具有预先授予的权限。 带有列username,PERMISSION\u name的表PERMISSION\u DETAIL包含授予或拒绝的权限的详细信息 现在,当用户从combobox中选择SQLuser时,权限将显示为复选框,例如,如果已经授予了权限,则会显示该复选框并选中其勾号,否则将取消选中 为此,我使用: if(permission is previously granted) checkbox1.checked = true; /
username
,PERMISSION\u name
的表PERMISSION\u DETAIL
包含授予或拒绝的权限的详细信息
现在,当用户从combobox中选择SQLuser时,权限将显示为复选框,例如,如果已经授予了权限,则会显示该复选框并选中其勾号,否则将取消选中
为此,我使用:
if(permission is previously granted)
checkbox1.checked = true; // here the Checkbox_CheckChanged event is called, but i dont want to call it.
checkbox1.enabled = false;
现在,除了复选框之外,还有一个按钮,单击它,复选框将被启用,即要修改权限,用户将单击该按钮
现在,用户将勾选或取消勾选复选框以授予或拒绝权限以及复选框更改事件
将被称为,这将是好的
我希望当复选框出现时,它的勾号被自动选中,但这会调用
checkbox\u Checkchanged
事件,但我不想调用该事件。在表单中添加一个布尔变量IsCheckboxEventShouldFire。最初设置为true。在将复选框设置为自动选中的代码中,现在也将IsCheckboxEventShouldFire设置为false。在checkchanged事件中,首先检查IsCheckBox事件是否为true。如果是,请运行代码。如果没有,那就不要。在事件代码末尾将IsCheckboxEventShouldFire设置为true。在EventHandler中执行任何操作之前,您可以检查复选框是否已启用:
protected void Checkbox_CheckChanged (object sender, ..EventArgs e)
{
//return if not enabled
if(!((CheckBox)sender).IsEnabled) return;
//DO THE REST
}
我认为,如果您为CheckChanged创建了一个事件处理程序,那么应该在“check已更改”时始终调用它,然后您应该处理逻辑。不管如何调用事件,重要的是如何处理该事件。事件发生了,你不能假装没有发生。你唯一能做的就是决定在某个特定的时间点上,这个事件对你是否有意义 例如:
public void chkPermission_CheckChanged(object sender, EventArgs e)
{
bool isChecked = chkPermission.Checked;
if (this.user.HasPermission() == isChecked) { return; }
// otherwise, we need to change some permissions!
}
分析你是否需要做任何事情,然后从那里开始。不要盲目地认为某个事件触发后需要更改。我建议您将Checkbox\u CheckChanged event更改为Checkbox\u Click event
private void Checkbox_Click(object sender, EventArgs e)
{
if ((sender as CheckBox).Checked)
{
MessageBox.Show("checked");
// add role to user
}
else
{
MessageBox.Show("un_checked");
/remove role ffrom user
}
}
在这种情况下添加另一个布尔标志是一个坏主意。应将检查值与相关用户的当前权限状态进行比较。否则,您的旗帜将不同步。我不同意。你认为他想看看任务是什么。我假设他想检查事件是因为用户操作还是由代码引起的。在这种情况下,布尔变量就是答案。不要在表单中添加任何标志变量。若项目是伟大的,那个么控制它将是困难的(艰苦的工作)。看看我的帖子,如果我使用:if(checkbox1.enabled==true)——那么有什么区别吗?我的意思是在你发布的查询和这个查询中?@sqlchild:不,没有区别。(复选框)发件人与本例中的复选框1相同。我的代码使它“更安全”,我希望您稍后更改checkbox1的名称,因为它可以用于任何名称。