0

世界の主要都市の天気を取得する天気アプリを作成しました。wsdl を使用して xml の気象データをダウンロードし、XmlDocument クラスを使用して要素から目的のデータを取得します。この情報をテキストボックスに表示します。テキストボックスの Horizo​​ntalScrollBarVisibility と VerticalScrollBarVisibility を auto に設定して、テキストが長すぎる場合にスクロールバーを表示するようにします。アプリからタイトル バーを削除したため、_MouseLeftButtonDown リスナーも実装しました。ただし、スクロールバーが表示されてクリックするたびに、DragMove() メソッドが呼び出されるため、テキストをスクロールできません。

どうすればこれを防ぐことができますか?

これが私のコードです。これは、wsdl から変換した GlobalWeather クラスと Countries クラスでのみ機能します。必要に応じて、コードを投稿するか、これらのクラスの wsdl をダウンロードして .cs に変換できます...

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Xml;

namespace WeatherApp
{
    /// <summary>
    /// Interaktionslogik für Window1.xaml
    /// </summary>
    public partial class Window1 : Window
    {
        // http://www.webservicex.net/globalweather.asmx?WSDL
        private static GlobalWeather wetterObjekt;
        //http://www.webservicex.net/ws/WSDetails.aspx?WSID=17&CATID=7
        Country country;
        private static string wetter;
        private static string wetterAktuell;
        private static List<string> countryList;
        private static List<string> cityList;

        public Window1 ()
        {            
            InitializeComponent ();            
            wetterAktuell = "";
            wetter = "";
            wetterObjekt = new GlobalWeather ();   
            country = new Country ();
            countryList = new List<string> ();
            cityList = new List<string> ();
            getCountries ();
            string firstStr = "(keins ausgewählt)";
            object firstItem = firstStr;
            txtStadt.Items.Add(firstItem);
            txtStadt.SelectedIndex = 0;
            txtLand.SelectedIndex = 0;
            txtWetter.IsEnabled = false;
            txtLand.SelectionChanged += new SelectionChangedEventHandler ( txtLand_SelectionChanged );
        }

        private void txtLand_SelectionChanged ( object sender, SelectionChangedEventArgs e )
        {
            Console.WriteLine(cityList.Count);
            if (cityList.Count > 0)
            {
                txtStadt.Items.Clear();
                cityList.Clear();
                string firstStr = "(keins ausgewählt)";
                object firstItem = firstStr;
                txtStadt.Items.Add(firstItem);
                txtStadt.SelectedIndex = 0;                
            }
            if ((string)(txtLand.SelectedValue) == "(keins ausgewählt)")
            {
                return;
            }
            else
            {                
                string land = "";
                land = txtLand.SelectedValue.ToString();
                getStadt(land);

                //Console.WriteLine(wetterObjekt.GetCitiesByCountry(land));
                //Console.WriteLine(land);
            }
        }

        private void getStadt (string land)
        {
            XmlDocument document = new XmlDocument();
            document.LoadXml(wetterObjekt.GetCitiesByCountry(land));
            XmlNodeList nl = document.GetElementsByTagName("NewDataSet");
            for (int x = 0; x < nl[0].ChildNodes.Count; x++)
            {
                for (int y = 1; y < nl[0].ChildNodes[x].ChildNodes.Count; y += 2)
                {
                    cityList.Add(nl[0].ChildNodes[x].ChildNodes[y].InnerText);
                }
            }

            cityList.Sort();

            for (int x = 0; x < cityList.Count; x++)
            {
                txtStadt.Items.Add(cityList[x]);

            }
        }

        private void getCountries()
        {
            string countries = country.GetCountries ();
            XmlDocument document = new XmlDocument ();
            document.LoadXml ( countries );
            XmlNodeList nl = document.GetElementsByTagName ( "NewDataSet" );
            string firstStr = "(keins ausgewählt)";
            object firstItem = firstStr;
            txtLand.Items.Add(firstItem);
            for ( int x = 0; x < nl [0].ChildNodes.Count; x++ )
            {
                for ( int y = 0; y < nl [0].ChildNodes [x].ChildNodes.Count; y++ )
                {                    
                    countryList.Add ( nl [0].ChildNodes [x].ChildNodes [y].InnerText );
                }
            }
            for ( int i = 0; i < countryList.Count; i++ )
            {
                txtLand.Items.Add ( countryList [i] );                
            }
        }

        private void getWeather ( string stadt, string land )
        {
            try
            {
                wetter = wetterObjekt.GetWeather(stadt, land);
                xmlParsen(wetter);
                txtWetter.Text = wetterAktuell;
            }
            catch (System.Xml.XmlException e)
            {
                clearWetterTextBox();
                txtWetter.Text = "Keine Wetterdaten gefunden!";
                //Console.WriteLine("Keine Wetterdaten gefunden!");
            }
        }

        private void btnSchliessen_Click ( object sender, RoutedEventArgs e )
        {
            this.Close ();
        }

        private void xmlParsen (string wetter)
        {
            XmlDocument document = new XmlDocument ();
            try
            {
                document.LoadXml(wetter);
                XmlNodeList nl = document.GetElementsByTagName("CurrentWeather");
                for (int i = 0; i < nl[0].ChildNodes.Count; i++)
                {
                    wetterAktuell = wetterAktuell + (nl[0].ChildNodes[i].Name + ": " + nl[0].ChildNodes[i].InnerText) + "\n";
                }
            }
            catch (System.Xml.XmlException e)
            {
                throw new System.Xml.XmlException();
            }            
        }

        private void btnGetWetter_Click ( object sender, RoutedEventArgs e )
        {            
            clearWetterTextBox ();
            getWeather (txtStadt.Text, txtLand.Text);
        }

        private void clearWetterTextBox ()
        {
            wetterAktuell = "";
            this.txtWetter.Clear ();
        }

        private void Window_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {            
            DragMove();
        }
    }
}
4

0 に答える 0