0

Windows phone7 の Web ブラウザー アプリでは、ユーザーが単に「bing.com」を UrlTExtBox に入力すると、UrlTextBox は「http://www.」を自動入力します。次のコードはそれを示しています。同時に、ユーザーが".com"なしで単に単語 (テクノロジーやプロジェクト グラスなど) を入力すると、UrlTextBox は再び"http://"で自動入力されます。しかし、単語しかない場合は、GoogleまたはBingで検索する必要があります。誰でもこれで私を助けることができますか?お疲れ様でした!

 private void UrlTextBox_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.Enter)
        {
            Uri url;
            if (Uri.TryCreate(UrlTextBox.Text, UriKind.Absolute, out url))
            {
                this.urls[this.currentIndex] = UrlTextBox.Text;
                this.browsers[this.currentIndex].Navigate(url);
                navigationcancelled = false;
                this.browsers[this.currentIndex].Focus();
            }
            else
            {
                Navigate(UrlTextBox.Text);
            }
        }
    }

 private void Navigate(String address)
    {
        if (String.IsNullOrEmpty(address)) return;
        if (address.Equals("about:blank")) return;
        if (!address.StartsWith("http://") &&
            !address.StartsWith("https://"))
        {
            address = "http://" + address;
        }
        try
        {
            browsers[this.currentIndex].Navigate(new Uri(address));
        }
        catch (System.UriFormatException)
        {
            return;
        }
    }
4

4 に答える 4

0

で分割できませんでした。.配列数が1の場合は、1つの単語であり、.comを追加する必要があります。そうでない場合は、適切なリンクとして扱う必要があります。

于 2012-05-25T03:01:20.727 に答える
0

あなたのナビゲート機能で、それがボックス内の1つの単語であるかどうかを確認し、そうであれば.comまたは.netなどで終わっているかどうかを確認してください。

于 2012-05-25T03:26:36.433 に答える
0

最後に、マット・レイシーの答えのアイデアを得ました。Navigate に if ステートメントをもう 1 つ追加するだけです。

        if (!address.Contains("."))
        {
            address = " ";
            browsers[this.currentIndex].Navigate(new Uri("http://www.google.com/search?q=" + UrlTextBox.Text, UriKind.Absolute));
        }

ポイントは、アドレス = " "を追加しなかった場合です。次に、UrlTextBox はhttp://を自動入力します。

于 2012-05-25T12:51:40.530 に答える
0

探しているロジックを示す簡単なコンソールアプリを次に示します。

namespace SO10747736
{
    using System;

    internal enum TestResult
    {
        TryCreatePass,
        ValidWithPrefix,
        Search,
        DoNothing,
        Unknown
    }

    public class Program
    {
        public static void Main(string[] args)
        {
            Test("http://example.com", TestResult.TryCreatePass);
            Test("https://example.com", TestResult.TryCreatePass);
            Test("https://example", TestResult.TryCreatePass);
            Test("example.com", TestResult.ValidWithPrefix);
            Test("example", TestResult.Search);
            Test("another example", TestResult.Search);
            Test(null, TestResult.DoNothing);
            Test(string.Empty, TestResult.DoNothing);
            Test("  ", TestResult.DoNothing);
            Test("about:blank", TestResult.DoNothing);

            Console.ReadKey(true);
        }

        private static void Test(string toTest, TestResult expectedResult)
        {
            var result = SimulateEnterkeyPressed(toTest);

            if (result == expectedResult)
            {
                Console.WriteLine("{0} was parsed correctly", toTest);
            }
            else
            {
                Console.WriteLine("*** {0} was NOT parsed correctly and returned {1} ***", toTest, result);
            }
        }

        private static TestResult SimulateEnterkeyPressed(string toTest)
        {
            if (string.IsNullOrWhiteSpace(toTest))
            {
                return TestResult.DoNothing;
            }

            // Uri.TryCreate will treat this as valid
            if (toTest.Equals("about:blank"))
            {
                return TestResult.DoNothing;
            }

            Uri url;
            if (Uri.TryCreate(toTest, UriKind.Absolute, out url))
            {
                return TestResult.TryCreatePass;
            }
            else
            {
                return TryParse(toTest);
            }
        }

        private static TestResult TryParse(string toTest)
        {
            if (!toTest.Contains("."))
            {
                return TestResult.Search;
            }

            if (!toTest.StartsWith("http://") ||
                !toTest.StartsWith("https://"))
            {
                return TestResult.ValidWithPrefix;
            }

            return TestResult.Unknown;
        }
    }
}
于 2012-05-25T09:08:35.603 に答える