2011-03-08 48 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 
      } 
     }