2017-06-06 73 views
0

如果授權== true,我需要我的選取器來隱藏元素。Picker給了我一個ArgumentOutOfRangeException,爲什麼會發生這種情況?

private async void Picker_Unfocused(object sender, FocusEventArgs e) 
    { 
     try 
     { 
      await DisplayAlert("try", picker.SelectedIndex.ToString(), "OK"); 

      if (response.domains[picker.SelectedIndex].authorization == true) 
      { 
       userNameEntry.IsVisible = false; 
       passwordEntry.IsVisible = false; 
       userLabel.IsVisible = false; 
      } 
      else 
      { 
       userNameEntry.IsVisible = true; 
       passwordEntry.IsVisible = true; 
       userLabel.IsVisible = true; 
      } 
     } 
     catch(System.ArgumentOutOfRangeException) 
     { 
      await DisplayAlert("catch", picker.SelectedIndex.ToString(), "OK"); 
     } 
    } 

這沒有幫助。我得到一個ArgumentOutOfRangeException。有誰知道爲什麼?這對我來說很重要。

編輯:代碼現在是當前代碼。 displayalerts只給我0,如果我選擇第一個項目,如果我選擇第二個,等等1我仍然不知道發生了什麼事情。如果SelectedIndex的值是0(或任何我選擇的),我不應該得到一個ArgumentOutOfRangeException,對吧?

+1

假設'picker'是一個下拉,有充分的可能性,'的SelectedIndex = -1'這將是一個理由例外。 –

+0

沒有選擇任何東西,它是-1或'response.domain'的大小與'picker'不同。 – juharr

+0

**使用你的調試器** ** picker.SelectedIndex的值是什麼,以及它如何與'response'集合的邊界進行比較? –

回答

1

當拾取器尚未初始化或可以查看空值並因此爲空時,SelectedIndex屬性將爲您提供值-1。該值在數組中無效。

你應該豐富你的代碼考慮到這種可能性,比如像這樣:

if (picker.SelectedIndex > -1 && response.domains[picker.SelectedIndex].authorization == true) 
{ 
    userNameEntry.IsVisible = false; 
    passwordEntry.IsVisible = false; 
    userLabel.IsVisible = false; 
} 
else 
{ 
    userNameEntry.IsVisible = true; 
    passwordEntry.IsVisible = true; 
    userLabel.IsVisible = true; 
} 
+0

我檢查,'SelectedIndex'屬性給我的值爲0,但我選擇一個項目,然後上面的代碼在Picker_Unfocused。因此,當選擇器未聚焦一些視覺項目應該隱藏,但即使我選擇了一個項目並且值爲0,我也會得到一個ArgumentOutOfRangeException。 –

相關問題