2014-01-05 40 views
2

我有一個問題,我似乎無法找到答案。好的,我在表單上有一個數據集,dgv和一個列表框。數據集有一些表格,對於某些表格,通過列表框selectedValueChanged事件選擇並設置主鍵。用戶在列表框中單擊一個名稱,並將項目selectedValue分配給項目變量。ListBox取消selectedValueChanged事件

item = Me.ListBoxItem.SelectedValue 
Me.itemID = index 

我也有,如果是在DGV的更改尚未提交到數據庫設置爲false布爾dsIsEditing。我正在做的是阻止用戶在列表中選擇另一個項目,如果dsIsEditing = true。

我知道有一個帶有cancelEventArgs參數的ListBox驗證事件,但我無法弄清楚如何實現它。我已經得到最接近的是從一個ListBoxItem selectedValueChanged事件執行下面的代碼:

If dsIsEditing = True Then 
     Dim result As MsgBoxResult 
     Dim clearMsg As String 
     clearMsg = "You have unsave changes. Are you sure you " & _ 
        "want to proceede? Any unsave changes will be lost." 

     result = MessageBox.Show(clearMsg, "Switching Order Selection", MessageBoxButtons.YesNo, MessageBoxIcon.Information, MessageBoxDefaultButton.Button2) 
     If result = MsgBoxResult.No Then 
      RemoveHandler ListBoxItem.SelectedValueChanged, AddressOfListBoxItem_SelectedValueChanged 
      Me.ListBoxItem.SelectedValue = Me.itemID 
      AddHandler ListBoxItem.SelectedValueChanged, AddressOf ListBoxItem_SelectedValueChanged 
      Exit Sub 
     End If 
    End If 

的代碼做什麼,我想它,但是我們要說當前項爲第H,如果我點擊B檢查項目將在列表框中顯示爲選中狀態,然後如果我選擇不繼續,它將恢復到項目H.我的頭痛在這裏:)找到正確的代碼,以便項目B不會在列表框中顯示爲選中狀態if否從消息框中選擇。預先感謝您的回覆。

回答

0

在設計用戶界面交互時,我發現它是一種更好的用戶體驗,可以防止用戶做某些事情,而不是告訴他們不正常,然後嘗試撤消他們所做的事情。

在你的情況下,只要將dsIsEditing標誌設置爲true,就禁用ListBox,然後啓用Cancel(或Undo)編輯按鈕。

「取消編輯」按鈕將詢問用戶上述相同的問題並執行必要的操作。

成功保存更改後,重新啓用列表框並禁用「取消編輯」按鈕。

如果由於某種原因,這是行不通的,你可以:

  1. 查找支持像一個SelectedValueChanging事件,它會讓你取消操作之前的值是一個第三方控件改變。

  2. 繼承ListBox控件的子類並嘗試通過重寫OnSelectedValueChanged方法來自己實現此功能,儘管我並不完全相信這會解決您的特定問題。這個在ComboBox的操作中爲Here is an example; ListBox的實現應該幾乎完全相同。

+0

感謝您的回覆。我想根據你的建議禁用ListBox控件我是在正確的軌道上。我也有一個DateTimePicker控件,一旦dsIsEditing = True,我就設置爲禁用。我應該想到對ListBox做同樣的事情。也感謝您提供代碼示例的鏈接。保重。 – Chaluta