世界の主要都市の天気を取得する天気アプリを作成しました。wsdl を使用して xml の気象データをダウンロードし、XmlDocument クラスを使用して要素から目的のデータを取得します。この情報をテキストボックスに表示します。テキストボックスの HorizontalScrollBarVisibility と 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();
}
}
}