2011-03-08 32 views
1

我有SQLusers,其中有从预先授予的权限列表的组合框。 表PERMISSION_DETAILusername列,permission_name由授予或拒绝事件在C#.NET WinForm应用程序处理它使用SQL Server

现在权限的细节,当用户选择从组合框中一个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; 

现在,除了复选框,有一个按钮,就点击它,复选框被启用,也就是,修改权限,用户点击该按钮。

现在用户将打勾或取消勾选复选框以授予或拒绝权限和复选框改变事件

将被调用,这样就可以了。

我希望当复选框出现时,它的勾号会自动检查,但这会调用事件,但我不想调用该事件。

+0

不添加任何标志的变量形成。如果项目很好,将难以控制它(艰苦的工作)。看我的帖子 – AEMLoviji 2011-03-08 10:38:34

回答

1

如果复选框被启用,在事件处理程序做任何事情之前,你可以检查:

protected void Checkbox_CheckChanged (object sender, ..EventArgs e) 
{ 
    //return if not enabled 
    if(!((CheckBox)sender).IsEnabled) return; 

    //DO THE REST 
} 

我认为,如果你做了CheckChanged的事件处理程序,应始终在“检查变更”之称,之后你应该处理逻辑。

+0

先生,如果我使用:if(checkbox1.enabled == true) - 那么有什么区别吗?我的意思是在你发布的查询和这一个? – sqlchild 2011-03-09 06:56:27

+1

@sqlchild:不,没有区别。 **(CheckBox)sender **与本例中的** checkbox1 **相同​​。我的代码使它更“安全”,我后来想改变checkbox1的名称,因为它可以与任何名称一起使用。 – cederlof 2011-03-09 08:03:44

-1

布尔变量,IsCheckboxEventShouldFire,添加到您的窗体。最初设置为true。在将复选框设置为自动检查的代码中,现在也将IsCheckboxEventShouldFire设置为false。在checkchanged事件中,首先检查IsCheckboxEventShouldFire是否为真。如果是,请运行您的代码。如果不是,那么不要。在事件代码结束时将IsCheckboxEventShouldFire设置为true。

+2

在这种情况下添加另一个布尔标志是一个坏主意。应该将检查值与相关用户的当前许可状态进行比较。否则,你的标志将失去同步。 – 2011-03-08 10:30:31

+0

我不同意。你假设他想检查一下任务是什么。我假设他想检查事件是否因用户操作或由代码引起而被解雇。在这种情况下,布尔变量就是答案。 – richard 2011-03-08 10:37:35

+0

Typo - mission = permission – richard 2011-03-08 10:56:53

1

事件会不管被调用,重要的是你如何处理该事件。一个事件发生了,你不能假装它没有。你唯一能做的就是决定这个事件在某个时间点对你来说意味着什么。

例如:

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! 
} 

分析你是否需要做任何事情,并从那里走。不要盲目地认为需要改变的事情是因为事件发生。

2

我建议你改变Checkbox_CheckChanged事件Checkbox_Click事件。

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 
      } 
     }