

C#で、URLのみが機能する入力フォームを作っています。

[code]

    if (e.Key == Key.Enter && !String.IsNullOrEmpty(txtUrl.Text)) {
        wbSample.Navigate(txtUrl.Text);
    }
    
[/code]

上記コードの機能は、

・ユーザーが任意のURLを入力してエンターキーを押すと、画面に該当ページが表示される。  
・ユーザーが未入力の状態でエンターキーを押すと、入力が無効の扱いになる。

これらは正しい判定です。

しかし、問題として **ユーザーがスペースキーで空白のみを入力した状態で、エンターキーを押すと強制終了してしまいます。**  
下記コードでは `IsNullOrEmpty`
を使用していますが、フォーム欄に空白のみの入力がある場合、エンターキーは無効にならず決定され、クラッシュします。

[code]

    if (e.Key == Key.Enter && !String.IsNullOrEmpty(txtUrl.Text))
    
[/code]

ユーザーが未入力状態でエンターキーを押した際と、ユーザーがスペースキーで空白のみを入力してエンターキーを押した際に、エンターキーが無効になるコーディングはありませんでしょうか？


CC BY-SA 4.0
2021-12-16T18:01:24.900
85175
2021-12-18T05:51:48.553
2021-12-18T05:51:48.553
3060
50534
question
c#
フォーム内でスペースキーで空白のみを入力してエンターキーを押すとクラッシュする


自己解決されたようですが、以下のように変更されたものと思われます。

>
> ユーザーが未入力状態でエンターキーを押した際と、ユーザーがスペースキーで余白のみを入力してエンターキーを押した際に、エンターキーが無効になるコーディングはありませんでしょうか？

こちらでデバッグ実行すると、

[code]

    if (e.Key == Key.Enter && !String.IsNullOrEmpty(txtUrl.Text))
    
[/code]

こちらの行で「ハンドルされていない例外 System.ArgumentException: '値が有効な範囲にありません。'」となります。

[code]

        wbSample.Navigate(txtUrl.Text);
    
[/code]

判定に使用するメソッドを`String.IsNullOrEmpty`から`String.IsNullOrWhiteSpace`に変えれば望み通りの動作になるでしょう。

[code]

    if (e.Key == Key.Enter && !String.IsNullOrWhiteSpace(txtUrl.Text))
    
[/code]

[String.IsNullOrEmpty(String) メソッド](https://docs.microsoft.com/ja-
jp/dotnet/api/system.string.isnullorempty?view=net-6.0)

> 指定された文字列が`null`または空の文字列 ("") であるかどうかを示します。

[String.IsNullOrWhiteSpace(String) メソッド](https://docs.microsoft.com/ja-
jp/dotnet/api/system.string.isnullorwhitespace?view=net-6.0)

> 指定された文字列が`null`または空であるか、空白文字だけで構成されているかどうかを示します。

* * *

質問では問題の箇所だけがピンポイントで提示されていますが、問題の再現・調査・修正確認のためには、例えば以下の記事の概要やTutorialを基に作業できます。

[Microsoft Edge WebView2 の概要](https://docs.microsoft.com/ja-jp/microsoft-
edge/webview2/)  
[WinForms アプリでの WebView2 の使用を開始する](https://docs.microsoft.com/ja-jp/microsoft-
edge/webview2/get-started/winforms)

上記TutorialのTextBoxである`addressBar`の`KeyDown`イベントに質問のコードを貼り付け、以下のようにTutorialの内容に合わせて調整します。  
それで問題の再現と調査、修正確認が出来るようになります。

[code]

    private void addressBar_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
    {
        // 問題再現時: if (e.KeyCode == Keys.Enter && !String.IsNullOrEmpty(addressBar.Text))
        if (e.KeyCode == Keys.Enter && !String.IsNullOrWhiteSpace(addressBar.Text)) // 修正版
        {
            webView.CoreWebView2.Navigate(addressBar.Text);
        }
    }
    
[/code]


CC BY-SA 4.0
2021-12-17T23:57:53.297
85206
2021-12-17T23:57:53.297
26370
85175
answer