V1.0.0.0の種類メニューの処理がいまいちだったので、次のようにリファクタリングしました。考え方は、class MenuItem
から継承したクラスAmedasTypeMenuItem を作成し、MenuItem で必要な情報をすべて持たせる方法です。
各MenuItemは、URL 生成のための文字列フォーマット(urlFormat)と、その文字列フォーマットに位置情報が必要かどうか(bool
locationMenu)、場所情報が必要かどうか(bool timeMenu)を持たせます。
using System; using System.Collections.Generic;
using
System.Windows.Forms;
namespace
Uchukamen.WZero3.WZero3DeAmedas {
public
class
AmedasTypeMenuItem
: MenuItem {
internal
bool
timeMenu; internal
bool
locationMenu; internal
string
urlFormat;
public
AmedasTypeMenuItem(string
name, bool
loc, bool
time, EventHandler
eh, string
sformat) { Text = name; locationMenu = loc; timeMenu = time; urlFormat = sformat; Click +=
new System.EventHandler(eh); } }
public
class
AmedasTypeMenu
{
public
void Set(MenuItem
mi, EventHandler
eh) { mi.MenuItems.Add(new
AmedasTypeMenuItem("天気予報",
true,
false, eh,
"http://www.jma.go.jp/jp/yoho/images/g1/{0}_telop_today.png")); mi.MenuItems.Add(new
AmedasTypeMenuItem("レーダー・降水ナウキャスト",
true,
true, eh,
"http://www.jma.go.jp/jp/radnowc/imgs/{2}/{0}/{1}.png"));
int
isat = mi.MenuItems.Add(new
AmedasTypeMenuItem("気象衛星",
false,
false, eh,
null)); mi.MenuItems[isat].MenuItems.Add(new
AmedasTypeMenuItem("赤外線",
false,
true, eh,
"http://www.jma.go.jp/jp/gms/imgs_c/0/infrared/1/{0}.png")); mi.MenuItems[isat].MenuItems.Add(new
AmedasTypeMenuItem("可視光",
false,
true, eh,
"http://www.jma.go.jp/jp/gms/imgs_c/0/visible/1/{0}.png"));
中略 } } }
これらの初期設定は、メインメニューから次のように行います。
private
void
CreateTypeMenu() { AmedasTypeMenu
atm = new
AmedasTypeMenu(); atm.Set(menuItemType, menuItemType_Click); }
これで、種類メニュー関連をこの1つのクラスに集中させます。
|
主なソースコードです。 FormMain.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Collections;
using System.Reflection;
using System.Xml;
using System.IO;
namespace Uchukamen.WZero3.WZero3DeAmedas
{
public partial class FormMain : Form
{
public FormMain()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
// 種類のメニューを作成する
CreateTypeMenu();
// 場所のメニューを作成する
CreateLocationMenu();
// 設定ファイルを読み込む
LoadConfig();
// 時間のメニューを作成する
UpdateTimeMenu();
// データを表示する
ShowAmedas();
}
#region 設定ファイルを読み込む
private void LoadConfig()
{
ConfigFile configFile = new ConfigFile();
configFile.ReadConfigFile();
// 種類メニューを設定
MenuItem miType = FindMenu(menuItemType, configFile.TypeName);
if (miType != null)
{
miType.Checked = true;
selectedTypeMenu = (AmedasTypeMenuItem)miType;
UpdateTimeMenu();
}
// 種類によっては、場所メニュー、時間メニューの有効、無効が違う
menuItemLocation.Enabled = selectedTypeMenu.locationMenu;
menuItemTimeMain.Enabled = selectedTypeMenu.timeMenu;
// 場所メニューを設定
MenuItem miLoc = FindMenu(menuItemLocation,
configFile.LocationName);
if (miLoc != null)
{
miLoc.Checked = true;
locationCode = ((AmedasLocatoinMenuItem)miLoc).locationCode;
}
}
private void UpdateTimeMenu()
{
if (selectedTypeMenu.Text.EndsWith("ナウキャスト"))
{
atm.CreateNowCastTime();
currentTimeCommand = atm.SetNowCastTimeMenu(menuItemTimeMain,
menuItemNowCastTimeEvent);
}
else
{
atm.CreateNormalTime();
currentTimeCommand = atm.SetNormalTimeMenu(menuItemTimeMain,
menuItemNormalTimeEvent);
}
}
///
/// メニューの文字列が一致するメニューを返す
///
/// 探すMenuItem
/// 探す文字列
/// 成功: MenuItem、失敗:null
private MenuItem FindMenu(MenuItem menuItem, string text)
{
foreach (MenuItem mi in menuItem.MenuItems)
{
if (mi.MenuItems.Count == 0 && text == mi.Text)
return mi;
if (mi.MenuItems.Count != 0)
{
MenuItem res = FindMenu(mi, text);
if (res != null)
return res;
}
}
return null;
}
#endregion
# region メニューのイベントハンドラー
///
/// 終了
///
private void menuItemTerminate_Click(object sender, EventArgs e)
{
Application.Exit();
}
///
/// About、バージョン情報
///
private void menuItemAbout_Click(object sender, EventArgs e)
{
FormAbout fb = new FormAbout();
fb.ShowDialog();
}
# endregion
#region 表示メソッド
///
/// アメダス情報を表示する
///
private void ShowAmedas()
{
if (selectedTypeMenu == null)
return;
Uri amedasUrl = BuildUrl();
webBrowser1.Navigate(amedasUrl);
}
private Uri BuildUrl()
{
Uri amedasUrl = null;
bool loc = selectedTypeMenu.locationMenu;
bool time = selectedTypeMenu.timeMenu;
string strFormat = selectedTypeMenu.urlFormat;
if (strFormat.IndexOf("radnowc") >= 0)
amedasUrl = new Uri(string.Format(strFormat,
locationCode, currentTimeCommand, nowCastCommand));
else if (loc == true && time == true)
amedasUrl = new Uri(string.Format(strFormat,
locationCode, currentTimeCommand));
else if (loc == true && time == false)
amedasUrl = new Uri(string.Format(strFormat,
locationCode));
else if (loc == false && time == true)
amedasUrl = new Uri(string.Format(strFormat,
currentTimeCommand));
else if (loc == false && time == false)
amedasUrl = new Uri(string.Format(strFormat));
return amedasUrl;
}
#endregion
#region 地域のメニュー
private string locationCode;
///
/// 地域メニューを作成
///
private void CreateLocationMenu()
{
AmedasLocationMenu alm = new AmedasLocationMenu();
alm.Set(menuItemLocation, menuItemLocationEvent);
}
///
/// 地域を選択した
///
private void menuItemLocationEvent(object sender, EventArgs e)
{
// Location メニューのチェックマークを更新
ClearMenuCheck(menuItemLocation);
((MenuItem)sender).Checked = true;
locationCode = ((AmedasLocatoinMenuItem)sender).locationCode;
ShowAmedas();
}
#endregion
#region 時間メニュー
private string currentTimeCommand = "";
AmedasTimeSet atm = new AmedasTimeSet();
private void menuItemNormalTimeEvent(object sender, EventArgs e)
{
// Location メニューのチェックマークを更新
ClearMenuCheck(menuItemTimeMain);
((MenuItem)sender).Checked = true;
currentTimeCommand = ((AmedasTimeMenuItem)sender).TimeCommand;
ShowAmedas();
}
string nowCastCommand = "radar";
private void menuItemNowCastTimeEvent(object sender, EventArgs e)
{
// Location メニューのチェックマークを更新
ClearMenuCheck(menuItemTimeMain);
((MenuItem)sender).Checked = true;
currentTimeCommand = ((AmedasTimeMenuItem)sender).TimeCommand;
if (((MenuItem)sender).Text.EndsWith("(予想)"))
nowCastCommand = "nowcast";
else
nowCastCommand = "radar";
ShowAmedas();
}
private void menuItemTimeMain_Popup(object sender, EventArgs e)
{
UpdateTimeMenu();
}
#endregion
#region 設定メニュー
private void menuItemConfig_Click(object sender, EventArgs e)
{
FormConfig formConfig = new FormConfig(
menuItemLocation, menuItemType);
formConfig.ShowDialog();
}
#endregion
#region アメダスの種類を選択するメニュー
///
///
///
public void menuItemType_Click(object sender, EventArgs e)
{
// Location メニューのチェックマークを更新
ClearMenuCheck(menuItemType);
((MenuItem)sender).Checked = true;
MenuTypeChanged((AmedasTypeMenuItem)sender);
}
// 現在のメニューの種類
AmedasTypeMenuItem selectedTypeMenu = null;
///
/// メニュー:種類が変更になった
///
///
private void MenuTypeChanged(AmedasTypeMenuItem mi)
{
mi.Checked = true;
selectedTypeMenu = mi;
menuItemLocation.Enabled = mi.locationMenu;
menuItemTimeMain.Enabled = mi.timeMenu;
nowCastCommand = "radar";
if (mi.timeMenu)
{
UpdateTimeMenu();
}
ShowAmedas();
}
private void CreateTypeMenu()
{
AmedasTypeMenu atm = new AmedasTypeMenu();
atm.Set(menuItemType, menuItemType_Click);
selectedTypeMenu = (AmedasTypeMenuItem)(
menuItemType.MenuItems[0]);
}
#endregion
///
/// メニューのチェックをクリアする
///
///
private void ClearMenuCheck(MenuItem menuItem)
{
foreach (MenuItem mi in menuItem.MenuItems)
{
if (mi.Checked) mi.Checked = false;
if (mi.MenuItems.Count != 0)
foreach (MenuItem miSecond in mi.MenuItems)
if (miSecond.Checked) miSecond.Checked = false;
}
}
private void menuItemMenuMain_Popup(object sender, EventArgs e)
{
UpdateTimeMenu();
}
}
}
|
FormConfig.cs
using System;
using System.Windows.Forms;
namespace Uchukamen.WZero3.WZero3DeAmedas
{
public partial class FormConfig : Form
{
public FormConfig(MenuItem amedasLocation, MenuItem menuItemType)
{
InitializeComponent();
SetAmedasType(menuItemType);
SetAmedasLocation(amedasLocation);
LoadConfig();
}
ConfigFile configFile = new ConfigFile();
///
/// 設定ファイルをロードして、表示する。
///
private void LoadConfig()
{
configFile.ReadConfigFile();
// 種類メニューを設定
foreach(object o in comboBoxType.Items)
if (((string)o) == configFile.TypeName)
comboBoxType.SelectedItem = o;
// 場所メニューを設定
foreach (object o in comboBoxLocation.Items)
if (((string)o) == configFile.LocationName)
comboBoxLocation.SelectedItem = o;
buttonSave.Focus();
}
///
/// 種類メニューに値をセットする
///
/// メインフォームの種類メニュー
private void SetAmedasType(MenuItem menuItemType)
{
foreach (MenuItem mi in menuItemType.MenuItems)
{
if (mi.MenuItems.Count == 0)
comboBoxType.Items.Add(mi.Text);
else
foreach (MenuItem miSecondLevel in mi.MenuItems)
comboBoxType.Items.Add(miSecondLevel.Text);
}
comboBoxType.SelectedIndex = 0;
}
///
/// 地域メニューに場所をセットする
///
/// メインフォームの地域メニュー
private void SetAmedasLocation(MenuItem amedasLocation)
{
foreach (MenuItem al in amedasLocation.MenuItems)
comboBoxLocation.Items.Add(al.Text);
comboBoxLocation.SelectedIndex = 0;
}
private void buttonSave_Click(object sender, EventArgs e)
{
configFile.WriteConfigFile(
(string)comboBoxType.SelectedItem,
(string)comboBoxLocation.SelectedItem);
Close();
}
private void buttonCancel_Click(object sender, EventArgs e)
{
Close();
}
}
}
|
ClassConfigFile.cs
using System.Text;
using System.Xml;
using System.Reflection;
using System.IO;
namespace Uchukamen.WZero3.WZero3DeAmedas
{
class ConfigFile
{
private string typeName = "天気予報";
public string TypeName
{
get { return typeName; }
set { typeName = value; }
}
private string locName = "全国";
public string LocationName
{
get { return locName; }
set { locName = value; }
}
private string configFilePath = GetCurrentDirectory() + "\\config.xml";
public void WriteConfigFile(string typeName, string locName)
{
using (XmlTextWriter xtw = new XmlTextWriter(configFilePath, Encoding.Unicode))
{
xtw.WriteStartElement("configuration");
xtw.WriteElementString("種類", typeName);
xtw.WriteElementString("地域", locName);
xtw.WriteEndElement();
xtw.Close();
}
}
public void ReadConfigFile()
{
// 設定ファイルがない場合は、何もしない
if (!File.Exists(configFilePath))
return;
using (XmlTextReader xtr = new XmlTextReader(configFilePath))
{
xtr.ReadStartElement("configuration");
typeName = xtr.ReadElementString("種類");
locName = xtr.ReadElementString("地域");
xtr.ReadEndElement();
xtr.Close();
}
}
private static string GetCurrentDirectory()
{
string fqn = Assembly.GetExecutingAssembly().ManifestModule.FullyQualifiedName;
FileInfo finfo = new FileInfo(fqn);
return finfo.DirectoryName;
}
}
}
|
ClassMenuLocation.cs
using System;
using System.Windows.Forms;
namespace Uchukamen.WZero3.WZero3DeAmedas
{
public class AmedasLocatoinMenuItem : MenuItem
{
internal string locationCode;
public AmedasLocatoinMenuItem(string locCode, string name, EventHandler eh)
{
locationCode = locCode;
Text = name;
Click += new System.EventHandler(eh);
}
}
public class AmedasLocationMenu
{
public void Set(MenuItem mi, EventHandler eh)
{
mi.MenuItems.Add(new AmedasLocatoinMenuItem("000", "全国", eh));
mi.MenuItems.Add(new AmedasLocatoinMenuItem("201", "北海道地方(北西部)", eh));
mi.MenuItems.Add(new AmedasLocatoinMenuItem("202", "北海道地方(東部)", eh));
mi.MenuItems.Add(new AmedasLocatoinMenuItem("203", "北海道地方(南西部)", eh));
mi.MenuItems.Add(new AmedasLocatoinMenuItem("204", "東北地方(北部)", eh));
mi.MenuItems.Add(new AmedasLocatoinMenuItem("205", "東北地方(南部)", eh));
mi.MenuItems.Add(new AmedasLocatoinMenuItem("206", "関東地方", eh));
mi.MenuItems.Add(new AmedasLocatoinMenuItem("207", "甲信地方", eh));
mi.MenuItems.Add(new AmedasLocatoinMenuItem("208", "北陸地方(東部)", eh));
mi.MenuItems.Add(new AmedasLocatoinMenuItem("209", "北陸地方(西部)", eh));
mi.MenuItems.Add(new AmedasLocatoinMenuItem("210", "東海地方", eh));
mi.MenuItems.Add(new AmedasLocatoinMenuItem("211", "近畿地方", eh));
mi.MenuItems.Add(new AmedasLocatoinMenuItem("212", "中国地方", eh));
mi.MenuItems.Add(new AmedasLocatoinMenuItem("213", "四国地方", eh));
mi.MenuItems.Add(new AmedasLocatoinMenuItem("214", "九州地方(北部)", eh));
mi.MenuItems.Add(new AmedasLocatoinMenuItem("215", "九州地方(南部)", eh));
mi.MenuItems.Add(new AmedasLocatoinMenuItem("216", "奄美地方", eh));
mi.MenuItems.Add(new AmedasLocatoinMenuItem("217", "沖縄・大東島地方", eh));
mi.MenuItems.Add(new AmedasLocatoinMenuItem("219", "宮古・八重山地方", eh));
}
}
}
|
ClassMenuTime.cs
using System;
using System.Collections.Generic;
using System.Windows.Forms;
namespace Uchukamen.WZero3.WZero3DeAmedas
{
public class AmedasTimeMenuItem : MenuItem
{
public DateTime Time;
public string TimeCommand;
public AmedasTimeMenuItem()
{ }
public AmedasTimeMenuItem(string menuText,
DateTime time, string timeCmd)
{
Text = menuText;
Time = time;
TimeCommand = timeCmd;
}
}
public class AmedasTimeSet
{
public List normalTime = new List();
public List nowCastTime = new List();
///
/// レーダー・降水ナウキャスト以外の場合の時間メニューを作成
/// 過去12時間まで1時間刻み
///
public void CreateNormalTime()
{
// リアルタイムでAmedasのデータは取得できない。
// 大体20分ぐらい遅れるので、現在時刻ー20分する。
DateTime nowMinus20Min = DateTime.Now.Subtract(
new TimeSpan(0, 20, 0));
// その時の時間(H)をベースの時間とする。
DateTime baseHour = new DateTime(
nowMinus20Min.Year, nowMinus20Min.Month, nowMinus20Min.Day,
nowMinus20Min.Hour, 0, 0);
normalTime.Clear();
for (int i = 0; i < 12; i++)
{
DateTime t = baseHour.Subtract(new TimeSpan(i, 0, 0));
string timeCmd = t.ToString("yyyyMMddHHmm") + "-00";
normalTime.Add(new AmedasTimeMenuItem(t.ToString("HH:mm"),
t, timeCmd));
}
}
///
/// レーダー・降水ナウキャストの場合の時間メニューを作成
/// 1時間後まで10分刻みの予想と
/// 過去6時間まで1時間刻み
///
public void CreateNowCastTime()
{
// リアルタイムでAmedasのデータは取得できない。
// 大体20分ぐらい遅れるので、現在時刻ー20分する。
DateTime nowMinus20Min = DateTime.Now.Subtract(
new TimeSpan(0, 20, 0));
// その時の時間(10分単位)をベースの時間(baseHourMin)とする。
DateTime baseHourMin = nowMinus20Min.Subtract
(new TimeSpan(0, nowMinus20Min.Minute % 10, 0));
// その時の時間(1時間単位)をベースの時間(baseHour)とする。
DateTime baseHour = new DateTime(
nowMinus20Min.Year, nowMinus20Min.Month, nowMinus20Min.Day,
nowMinus20Min.Hour, 0, 0);
nowCastTime.Clear();
// 1時間後まで10分刻みの予想
for (int i = 6; i > 0; i--)
{
DateTime t = baseHourMin.Add(new TimeSpan(0, 10 * i, 0));
string timeCmd = baseHourMin.ToString("yyyyMMddHHmm") +
"-0" + i.ToString();
nowCastTime.Add(new AmedasTimeMenuItem
(t.ToString("HH:mm(予想)"), t, timeCmd));
}
// 過去6時間まで、1時間刻み
for (int i = 0; i < 6; i++)
{
DateTime t = baseHour.Subtract(new TimeSpan(i, 0, 0));
string timeCmd = t.ToString("yyyyMMddHHmm") + "-00";
nowCastTime.Add(new AmedasTimeMenuItem(t.ToString("HH:mm"),
t, timeCmd));
}
}
public string SetNormalTimeMenu(Menu menu, EventHandler eh)
{
menu.MenuItems.Clear();
foreach (AmedasTimeMenuItem at in normalTime)
{
int i = menu.MenuItems.Add(at);
menu.MenuItems[i].Click += new System.EventHandler(eh);
}
ClearMenuCheck(menu);
normalTime[0].Checked = true;
return normalTime[0].TimeCommand;
}
public string SetNowCastTimeMenu(Menu menu, EventHandler eh)
{
menu.MenuItems.Clear();
foreach (AmedasTimeMenuItem at in nowCastTime)
{
int i = menu.MenuItems.Add(at);
menu.MenuItems[i].Click += new System.EventHandler(eh);
}
ClearMenuCheck(menu);
menu.MenuItems[6].Checked = true;
return nowCastTime[6].TimeCommand;
}
private void ClearMenuCheck(Menu menuItem)
{
// メニューのチェックをクリアする
foreach (MenuItem mi in menuItem.MenuItems)
{
if (mi.Checked) mi.Checked = false;
if (mi.MenuItems.Count != 0)
foreach (MenuItem miSecond in mi.MenuItems)
if (miSecond.Checked) miSecond.Checked = false;
}
}
}
}
|
ClassMenuType.cs
using System;
using System.Collections.Generic;
using System.Windows.Forms;
namespace Uchukamen.WZero3.WZero3DeAmedas
{
public class AmedasTypeMenuItem : MenuItem
{
internal bool timeMenu;
internal bool locationMenu;
internal string urlFormat;
public AmedasTypeMenuItem(string name, bool loc,
bool time, EventHandler eh, string sformat)
{
Text = name;
locationMenu = loc;
timeMenu = time;
urlFormat = sformat;
Click += new System.EventHandler(eh);
}
}
public class AmedasTypeMenu
{
public void Set(MenuItem mi, EventHandler eh)
{
mi.MenuItems.Add(new AmedasTypeMenuItem("天気予報", true, false, eh,
"http://www.jma.go.jp/jp/yoho/images/g1/{0}_telop_today.png"));
mi.MenuItems.Add(new AmedasTypeMenuItem("レーダー・降水ナウキャスト", true, true, eh,
"http://www.jma.go.jp/jp/radnowc/imgs/{2}/{0}/{1}.png"));
int isat = mi.MenuItems.Add(new AmedasTypeMenuItem("気象衛星", false, false, eh,
null));
mi.MenuItems[isat].MenuItems.Add(new AmedasTypeMenuItem("赤外線", false, true, eh,
"http://www.jma.go.jp/jp/gms/imgs_c/0/infrared/1/{0}.png"));
mi.MenuItems[isat].MenuItems.Add(new AmedasTypeMenuItem("可視光", false, true, eh,
"http://www.jma.go.jp/jp/gms/imgs_c/0/visible/1/{0}.png"));
mi.MenuItems[isat].MenuItems.Add(new AmedasTypeMenuItem("水蒸気", false, true, eh,
"http://www.jma.go.jp/jp/gms/imgs_c/0/watervapor/1/{0}.png"));
mi.MenuItems.Add(new AmedasTypeMenuItem("降水量", true, true, eh,
"http://www.jma.go.jp/jp/amedas/imgs/rain/{0}/{1}.png"));
mi.MenuItems.Add(new AmedasTypeMenuItem("気温", true, true, eh,
"http://www.jma.go.jp/jp/amedas/imgs/temp/{0}/{1}.png"));
mi.MenuItems.Add(new AmedasTypeMenuItem("日照時間", true, true, eh,
"http://www.jma.go.jp/jp/amedas/imgs/sun/{0}/{1}.png"));
mi.MenuItems.Add(new AmedasTypeMenuItem("風向・風速", true, true, eh,
"http://www.jma.go.jp/jp/amedas/imgs/wind/{0}/{1}.png"));
mi.MenuItems.Add(new AmedasTypeMenuItem("積雪深", true, true, eh,
"http://www.jma.go.jp/jp/amedas/imgs/snow/{0}/{1}.png"));
mi.MenuItems.Add(new AmedasTypeMenuItem("台風", false, false, eh,
"http://www.jma.go.jp/jp/typh/images/wide/all-00.png"));
mi.MenuItems.Add(new AmedasTypeMenuItem("ウィンドプロファイラ", false, true, eh,
"http://www.jma.go.jp/jp/windpro/imgs/000/{0}.png"));
int iwarn = mi.MenuItems.Add(new AmedasTypeMenuItem("警報", false, false, eh,
null));
mi.MenuItems[iwarn].MenuItems.Add(new AmedasTypeMenuItem("すべて", true, false, eh,
"http://www.jma.go.jp/jp/warn/imgs/{0}/99.png"));
mi.MenuItems[iwarn].MenuItems.Add(new AmedasTypeMenuItem("大雨", true, false, eh,
"http://www.jma.go.jp/jp/warn/imgs/{0}/02.png"));
mi.MenuItems[iwarn].MenuItems.Add(new AmedasTypeMenuItem("洪水", true, false, eh,
"http://www.jma.go.jp/jp/warn/imgs/{0}/03.png"));
mi.MenuItems[iwarn].MenuItems.Add(new AmedasTypeMenuItem("暴風(強風)", true, false, eh,
"http://www.jma.go.jp/jp/warn/imgs/{0}/04.png"));
mi.MenuItems[iwarn].MenuItems.Add(new AmedasTypeMenuItem("波浪", true, false, eh,
"http://www.jma.go.jp/jp/warn/imgs/{0}/06.png"));
mi.MenuItems[iwarn].MenuItems.Add(new AmedasTypeMenuItem("雷", true, false, eh,
"http://www.jma.go.jp/jp/warn/imgs/{0}/08.png"));
mi.MenuItems[iwarn].MenuItems.Add(new AmedasTypeMenuItem("濃霧", true, false, eh,
"http://www.jma.go.jp/jp/warn/imgs/{0}/10.png"));
mi.MenuItems[iwarn].MenuItems.Add(new AmedasTypeMenuItem("低温", true, false, eh,
"http://www.jma.go.jp/jp/warn/imgs/{0}/13.png"));
}
}
}
|
|