kkdxghlctlcxxtidyuum Ответов: 1

Как я могу заставить эту вещь пространства имен работать в GUI C#


Привет :) Я делаю простой alt-клиент для игры, я почти закончил, и большая часть того, что я сделал, была в пределах моих возможностей. Однако мне нужно добавить поиск цены товара. Как я могу связать это с графическим интерфейсом, я хочу, чтобы цена отображалась в текстовом поле. Заранее большое спасибо.
<pre>using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Windows.Forms;
using System.Text.RegularExpressions;

namespace GELookup
{
    public class GELookup
    {
        private ArrayList id;
        private ArrayList name;
        public List<string> Result;

        public GELookup(string Item, bool MultiPage, int Page)
        {
            try
            {
                Result = new List<string>();
                id = new ArrayList();
                name = new ArrayList();

                //Get GE HTML.
                string strPage = GetFile("http://itemdb-rs.runescape.com/results.ws?query=" + Item + "&sup=All&cat=All&sub=All&page=" + Page + "&vis=1&order=1&sortby=name&price=all&members=");
                string[] splitter = new string[] { "./viewitem.ws?obj=" };
                string[] array;

                //Split the HTML at the Items.
                array = strPage.Split(splitter, StringSplitOptions.None);
                splitter = new string[] { "\"> " };

                //Add the Items while cleaning up the names/ID's
                for (int i = 1; i < array.Length; i++)
                {
                    id.Add(array[i].Split(splitter, StringSplitOptions.None)[0]);
                    name.Add(array[i].Split(splitter, StringSplitOptions.None)[1].Split(new string[] { "</a>" }, StringSplitOptions.None)[0]);
                }

                //Add the Items to the Result List
                for (int i = 0; i < id.Count; i++)
                {
                    Result.Add(name[i].ToString()); ;
                }

                //If MultiPage is true find the last page number and repeat
                //the search with ParsePage() method.
                if (MultiPage)
                {
                    int Start = strPage.IndexOf("<td class=\"navmid\">\n1");
                    int Finish = strPage.IndexOf("</td>\n<td class=\"navright\">");
                    string Data = "blank";
                    if (Start > 0 && Finish > 0)
                    {
                        Data = strPage.Substring(Start);
                        Data = Data.Substring(0, Data.IndexOf("</td>\n"));
                        Data = Data.Substring(Data.LastIndexOf("bers=\">") + 7, 1);
                        string[] Data2 = Data.Split(new string[] { "\n<a href=\"./results.ws?query=" + Item + "&sup=All&cat=All&sub=All&page=2&vis=1&order=1&sortby=name&price=all&members=\">", "</a>", "<td>" }, StringSplitOptions.None);

                        List<object> _Results = new List<object>();

                        char[] number = Data.ToCharArray();
                        if (Char.IsNumber(number[0]))
                        {
                            int Count = Convert.ToInt32(Data);
                            for (int X = 2; X <= Count; X++)
                            {
                                _Results.Add(ParsePage(Item, X));
                            }

                            //All of the pages have been parsed so add it all to the Result List.
                            for (int i = 0; i < _Results.Count; i++)
                            {
                                Result.AddRange((List<string>)_Results[i]);
                            }
                        }
                    }
                }
            }
            catch
            {
                MessageBox.Show("Error Code: 010.\r\nPlease post this Error Code in the Bug's\r\nSection of the forum.\r\nThank you.");
            }
        }

        public GELookup()
        { }

        //Self Explanitory.
        private string GetFile(string strURL)
        {
            try
            {
                WebRequest myWebRequest = WebRequest.Create(strURL);

                WebResponse myWebResponse = myWebRequest.GetResponse();

                Stream ReceiveStream = myWebResponse.GetResponseStream();

                Encoding encode = System.Text.Encoding.GetEncoding("utf-8");

                StreamReader readStream = new StreamReader(ReceiveStream, encode);

                string strResponse = readStream.ReadToEnd();

                readStream.Close();

                myWebResponse.Close();
                return strResponse;
            }
           catch(Execption e)
            {
                MessageBox.Show(e.ToString());
                return null;
            }
        }
        
        //Basicly a copy of the Constructor only this only parses one page...
        private List<string> ParsePage(string Item, int Page)
        {
            try
            {
                ArrayList id1 = new ArrayList();
                ArrayList name1 = new ArrayList();
                List<string> Result1 = new List<string>();

                string strPage = GetFile("http://itemdb-rs.runescape.com/results.ws?query=" + Item + "&sup=All&cat=All&sub=All&page=" + Page + "&vis=1&order=1&sortby=name&price=all&members=");
                string[] splitter = new string[] { "./viewitem.ws?obj=" };
                string[] array;
                array = strPage.Split(splitter, StringSplitOptions.None);
                splitter = new string[] { "\"> " };
                for (int i = 1; i < array.Length; i++)
                {
                    id.Add(array[i].Split(splitter, StringSplitOptions.None)[0]);
                    name1.Add(array[i].Split(splitter, StringSplitOptions.None)[1].Split(new string[] { "</a>" }, StringSplitOptions.None)[0]);
                }

                for (int i = 0; i < name1.Count; i++)
                {
                    Result1.Add(name1[i].ToString()); ;
                }
                return Result1;
            }
            catch(Execption e)
            {
                MessageBox.Show(e.ToString());
                return null;
            }       
        }
        
        //Takes the Index of the Item in the ListBox and returns
        //A string array of prices and the picture.
        public string[] GetPrice(int ItemIndex)
        {
            try
            {
                string[] ReturnPrices = new string[6];
                int index = ItemIndex;
                string[] price = new string[3];
                string[] array;
                string[] splitter = new string[] { "price: " };
                if (index != -1)
                {
                    string page = GetFile("http://itemdb-rs.runescape.com/viewitem.ws?obj=" + id[index]);
                    array = page.Split(splitter, StringSplitOptions.None);
                    splitter = new string[] { "</span>" };
                    for (int i = 0; i < 3; i++)
                    {
                        price[i] = array[i + 1].Split(splitter, StringSplitOptions.None)[0];
                    }

                    Regex Regex = new Regex("\\d{4}_obj_big.gif?");
                    Match match = Regex.Match(page);
                    string matchResult = match.Value;
                    string DynamicId = matchResult.Remove(4);

                    ReturnPrices[0] = "Name: " + Result[index];
                    ReturnPrices[1] = "ID: " + id[index];
                    ReturnPrices[2] = "Minimum Price: " + price[0];
                    ReturnPrices[3] = "Market Price: " + price[1];
                    ReturnPrices[4] = "Maximum Price: " + price[2];
                    ReturnPrices[5] = GetImage(Convert.ToString(id[index]), DynamicId);
                }

                return ReturnPrices;
            }
            catch(Execption e)
            {
                MessageBox.Show(e.ToString());
                return null;
            }
        }
        
        //Gets the Image of Item with the ItemID and returns the path to the saved image.
        private string GetImage(string ItemID,string imageDynId)
        {
            try
            {
                DirectoryInfo Folder = new DirectoryInfo(Directory.GetCurrentDirectory() + @"\GeImages\");

                //Check to see if that folder is there if not
                //create it.
                if (!Folder.Exists)
                {
                    Folder.Create();
                }

                //Check to see if the file has been downloaded before
                //if not download it, if so return the path.
                if (!File.Exists(Directory.GetCurrentDirectory() + @"\GeImages\" + ItemID + ".gif"))
                {
                    WebClient objClient = new WebClient();
                    objClient.DownloadFile(@"http://itemdb-rs.runescape.com/" + imageDynId + "_obj_big.gif?id=" + ItemID, Directory.GetCurrentDirectory() + @"\GeImages\" + ItemID + ".gif");
                }


                return Directory.GetCurrentDirectory() + @"\GeImages\" + ItemID + ".gif";
            }
            catch(Execption e)
            {
                MessageBox.Show(e.ToString());
                return null;
            }
        }

        public string[] GetGraph(string ItemID)
        {
            try
            {
                DirectoryInfo Folder = new DirectoryInfo(Directory.GetCurrentDirectory() + @"\GeImages\");

                //Check to see if that folder is there if not
                //create it.
                if (!Folder.Exists)
                {
                    Folder.Create();
                }

                string page = GetFile("http://itemdb-rs.runescape.com/viewitem.ws?obj=" + ItemID);
                Regex Regex = new Regex("\\d{4}_graphimg.gif?");
                Match match = Regex.Match(page);
                string matchResult = match.Value;
                string graphDynId = matchResult.Remove(4);

                Uri File1 = new Uri("http://itemdb-rs.runescape.com/" + graphDynId + "_scaleimg.gif?id=" + ItemID + "&scale=0&axis=0");
                Uri File2 = new Uri("http://itemdb-rs.runescape.com/" + graphDynId + "_graphimg.gif?id=" + ItemID + "&scale=0");
                Uri File3 = new Uri("http://itemdb-rs.runescape.com/" + graphDynId + "_scaleimg.gif?id=" + ItemID + "&scale=0&axis=2");

                WebClient objClient = new WebClient();
                objClient.DownloadFile(File1, Directory.GetCurrentDirectory() + @"\GeImages\" + ItemID + "Graph_Scale1.gif");
                objClient.DownloadFile(File2, Directory.GetCurrentDirectory() + @"\GeImages\" + ItemID + "Graph_Graph.gif");
                objClient.DownloadFile(File3, Directory.GetCurrentDirectory() + @"\GeImages\" + ItemID + "Graph_Scale2.gif");

                return new string[3] {Directory.GetCurrentDirectory() + @"\GeImages\" + ItemID + "Graph_Scale1.gif", Directory.GetCurrentDirectory() + @"\GeImages\" + ItemID + "Graph_Graph.gif", Directory.GetCurrentDirectory() + @"\GeImages\" + ItemID + "Graph_Scale2.gif"};
            }
            catch(Exception e)
            {
                MessageBox.Show(e.ToString());
                return null;
            }
        }        
    }
}


Что я уже пробовал:

Я провел последние 2 дня в поисках ответов.

j snooze

Разве вы не можете просто перетащить текстовое поле в свою форму и установить его свойство .text на любой текст, который вы хотите?

1 Ответов

Рейтинг:
1

OriginalGriff

Вы этого не делаете - ваш класс не является производным от элемента управления, поэтому он не может ничего отображать напрямую. Я бы даже не был рад этому, используя MessageBox, сам...
И это не имеет никакого отношения к namespaces любой...

Идея заключается в том, что ваш пользовательский интерфейс использует ваши классы, не являющиеся пользовательским интерфейсом, для сбора данных для отображения; класс даже не должен пытаться отображать данные, потому что он не должен знать, в какой среде он должен найти себя: веб-сайт может использовать те же классы, что и приложение WinForms, как приложение WPF, как приложение Xamarin iOS, без изменения ваших классов.

Поэтому не смотрите сюда, посмотрите на свой пользовательский интерфейс, чтобы использовать свои классы для обработки данных для отображения вашего пользовательского интерфейса для себя.