簡體   English   中英

將重點放在密碼箱上

[英]Setting focus on Passwordbox

所以我有一個帶有登錄窗口的C#WPF應用程序。 在此窗口中,我還有一個復選框,可確保用戶下次啟動該應用程序時的用戶名安全(就像“記住我”一樣)。

顯然,此窗口的正常“焦點”是用戶名。 但是,如果用戶選擇了“記住我”復選框,則密碼框應位於“焦點”位置(因為用戶名已填寫)。

所以我寫了這段代碼:

在Xaml中:

<PasswordBox
    Name="PW"
    Grid.Row="2"
    Grid.Column="1"
    Margin="10 0 10 0"
    VerticalContentAlignment="Center"
    Height="45"/>

<CheckBox
    Name="CB"
    Grid.Row="1"
    Grid.Column="1"
    VerticalAlignment="Bottom"
    Margin="10"
    Content="Remember me"/>

<TextBox
    Name="Tbx"
    Grid.Row="1"
    Grid.Column="1"
    Margin="10 0 10 0"
    Text="{Binding Path=User}"
    VerticalContentAlignment="Center"
    Height="45"/>

<Button
    Name="Btn"
    Grid.Row="3"
    Grid.Column="1"
    Content="Login"
    Height="40"
    Width="100"
    VerticalAlignment="Center"
    HorizontalAlignment="Center"
    Command="{Binding Path=LoginUser}"
    Click="Btn_Click" 
    IsDefault="True"/>

文本框中的綁定只是一個屬性,它獲取輸入的值。

按鈕中的綁定也只是一個屬性,該屬性檢查用戶名和密碼,然后打開另一個窗口(所以我不認為這很必要顯示)。

在xaml.cs中

private void Btn_Click(object sender, RoutedEventArgs e)
    {
        if (Cb.IsChecked == true)
        {
        Properties.Settings.Default.Username = Tbx.Text;
        }
    }

因此,使用此Button_Click,我可以保護輸入的用戶名的安全,以便應用程序下次可以記住它。 這可以正常工作。

現在有趣的部分是Window_Loaded事件:

try
    {
    IsolatedStorageFile isolatedStorage = IsolatedStorageFile.GetUserStoreForAssembly();
    StreamReader srReader = new StreamReader(new IsolatedStorageFileStream("isotest", FileMode.OpenOrCreate, isolatedStorage));

    string Input = srReader.ReadLine().TrimStart();
    string InputCut = Input.Substring(0, Input.Length - 25);
    Tbx.Text = InputCut;
    Cb.IsChecked = true;
    Pb.Focus()
    }
    catch(Exception ex)
    {}

因此,如果CheckBox被選中,他將遍歷try部分,並准備使用Pb.Focus()(我已逐步完成),但密碼框卻無法獲得焦點。 然后我想,可能是因為“嘗試-抓住”,所以我試圖將“焦點”設置在此范圍之外,但同樣會出現問題。 Passwortbox不會變得專注。

我已經在Google上搜索了確切的問題,但找不到任何內容(只有關於如何將焦點設置在密碼箱上的常見問題)

我也在這里檢查了stackoverflow,但是我發現的唯一發現是: 在應用程序啟動時將焦點放在PasswordBox上,這顯然不是我的問題,我已經在Window_Loaded中擁有了Focus。

預期的結果是,密碼框正在獲得Focus,但是某種程度上卻不會。 我什至沒有收到任何錯誤消息,因此我無法提供任何錯誤消息。

如果您需要更多信息,請直接打給我,然后我將編輯問題。 我希望任何人都知道這個問題,並可以在這里為我提供幫助。 謝謝!

我想您的問題可能被您的空白所掩蓋。

IE瀏覽器您有一個錯誤,但捕獲只是“吃”它,所以您永遠不會看到它。

您可以單步執行,卻沒有注意到它跳到了陷阱,這似乎很奇怪。

當然,逐步執行將使您的工作變得混亂。

這是工作標記和代碼:

    <StackPanel>
        <TextBox
            Name="Tbx" Height="45"/>
        <PasswordBox
            Name="PW" Height="45"/>
        <CheckBox
           Name="CB" Content="Remember me"/>
        <Button
          Name="Btn"  Height="40"  Width="100" IsDefault="True"/>
    </StackPanel>


    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        string InputCut = "Blaa";
        Tbx.Text = InputCut;
        CB.IsChecked = true;
        PW.Focus();
    }

創建一個新的解決方案。

現在還沒有。

因為任何錯誤都可能位於代碼中的某個地方,所以您沒有向我們展示。

將上面的標記和代碼粘貼到主窗口中。

確保您掛接了已加載的事件。

觀看它的工作。

我的建議是:

刪除嘗試捕獲,不要再使用空的捕獲塊。

修復您的代碼,從隔離存儲中讀取該字符串,使其更健壯。

對於WPF,它通常更常用

 Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) 

用戶的appdata漫游根目錄。

如果您的代碼仍然無法正常工作或出錯,則將您的應用程序片段添加到您創建的新解決方案中,直到您重現該問題為止。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM