打开使用字符串命令动态生成的超链接

时间:2014-04-21 21:08:22

标签: c# wpf dynamic hyperlink

背景故事,

所以我正在制作一个个人助理程序,我的所有语音命令都被翻译成字符串进行解析。

我已经设置了搜索Google并在文本块中将结果显示为超链接的功能。

现在我希望能够设置使用语音打开这些链接的能力(字符串命令)。到目前为止,我有以下内容。

这一位允许我使用Google自定义搜索API和自定义“GoogleSearch”类进行搜索。

public void search_google(string query) //Google Searching
    {
        #region link strings
        string result_1 = "";
        string result_2 = "";
        string result_3 = "";
        string result_4 = "";
        string result_5 = "";
        string result_6 = "";
        string result_7 = "";
        string result_8 = "";
        string result_9 = "";
        string result_10 = "";
        #endregion

        GoogleSearch search = new GoogleSearch()
        {
            Key = "{apikey}",
            CX = "{cxkey}"
        };
        search.SearchCompleted += (a, b) =>
        {
            tab_control.SelectedIndex = 2;
            int p = 1;
            search_results.Text = String.Empty;
            foreach (Item i in b.Response.Items)
            {

                Hyperlink hyperLink = new Hyperlink()
                {
                    NavigateUri = new Uri(i.Link)
                };
                hyperLink.Inlines.Add(i.Title);
                hyperLink.RequestNavigate += Hyperlink_RequestNavigate;
                hyperLink.Name = "result_" + p;
                //search_results.Inlines.Add(hyperLink.Name);
                search_results.Inlines.Add(Environment.NewLine);
                search_results.Inlines.Add(hyperLink);

                search_results.Inlines.Add(Environment.NewLine);
                search_results.Inlines.Add(i.Snippet);
                search_results.Inlines.Add(Environment.NewLine);
                search_results.Inlines.Add(Environment.NewLine);
                p++;

            };
        };
        search.Search(query);
    }

它将我的结果以一系列超链接和文本片段输出到我在主窗口中设置的文本块中。搜索过程由我的输入解析器触发,该解析器查找关键字“search”或“Google”。

下一步是输入解析器检查关键字“result”以查找要打开的超链接。这是未完成的代码。

if ((Input.Contains("result") || Input.Contains("Result")) && tab_control.TabIndex == 2)
        {
            int result_number = 0;
            switch(result_number)
            {
                case 1:
                    if (Input.Contains("first") || Input.Contains("1st"))
                    {
                        // open hyperlink with name property result_1
                    }
                    break;
                case 2:
                        // additional cases added up to 10 with similar syntax for parsing.
            }
        }

1 个答案:

答案 0 :(得分:0)

您可以使用以下方法在默认浏览器中打开超链接:

Process.Start(myHyperlink);

编辑

根据您的评论,您似乎无法访问result_1(等等)。

您将result_1定义为方法search_google()

的本地变量
public void search_google(string query) //Google Searching
{
    #region link strings
    string result_1 = "";

这意味着result_1仅在该方法中可见。

您的ifswitch语句似乎不是search_google()的一部分,因此他们永远看不到result_1。如果这些陈述采用不同的方法,则可以通过将result_1移至类级别(search_google()之外)来解决该问题。

在网站注释上,您可能希望使用字符串数组或字符串列表,而不是定义十个单独的结果字符串。