Windowsフォームアプリケーション(C#)に奇妙な問題があります。私はNotifyIconとフォーム(Form1)と別のフォーム(Form2)をプロジェクトに持っています。 Form1には基本的にXML解析が行われ、一連のLinkLabelsがForm2に追加されるコードがいくつかあります。これはすべて正常に動作します。Windowsフォーム:閉じていますが閉じていません。
NotifyIconでは、基本的には、コマンドでXML解析を実行するために、EventHandlerを使用してContextMenu MenuItem(「リフレッシュ」と呼ばれる)を持っています。 NotifyIconには、システムトレイアイコンをダブルクリックすると、Form2(ShowDialog()を使用)を開いてLinkLabelsのリンクを表示するMouseDoubleClickコマンドもあります。これも正常に動作します。 Form2のを閉鎖する
private void btnClose_Click(object sender, EventArgs e)
{
this.Close();
}
:
私はForm2の( "閉じる" と呼ばれる)上のボタンコントロールを持っている。これは、このイベントハンドラのコードを使用しています。これも正常に動作します。
ただし、Form1のNotifyIconの「更新」ContextMenu MenuItemがヒットした回数に応じて、これはForm2を閉じる前にForm2の「閉じる」ボタンコントロールを押す必要があります。たとえば、ユーザーがForm1で「Refresh」MenuItemを3回押すと、Form2の「閉じる」ボタンコントロールを3回押す必要があります。これはForm2が目に見えて閉じるようなものですが、コードは閉じていることを認識していないようです。
私はWindowsフォームの開発には新しく、多分それは私が気づいていないライフサイクルのものです。どんな助けもありがとう。
EDIT。フォーム2(メッセージ)で
//NotifyIcon Form (Form1)
//ico is the ID of the NotifyIcon
public partial class TrayIcon : Form
{
Message msg = new Message(); //Form2
ContextMenu contextMenu = new ContextMenu();
public TrayIcon()
{
InitializeComponent();
}
private void TrayIcon_Load(object sender, EventArgs e)
{
contextMenu.MenuItems.Clear();
contextMenu.MenuItems.Add(0, new MenuItem("Refresh", new System.EventHandler(ico_Refresh)));
ico.DoubleClick += new MouseEventHandler(ico_ShowMsg);
DoXmlParsing();
}
private void ico_Refresh(object Sender, EventArgs e)
{
TrayIcon_Load(null, null);
}
private void ico_ShowMsg(object Sender, MouseEventHandler e)
{
if (msg.Visible == false)
msg.ShowDialog();
}
}
私はこれをクリックハンドラのコードとボタンがあります:
あなたの説明から、private void btnClose_Click(object sender, EventArgs e)
{
this.Close();
//I have also tried:
if (this.Visible)
this.Hide();
}
Refresh MenuItemのコードとForm2を開くコードを投稿できますか? –
Fo rm2はモードレスなフォームですか?また、btnClose_Clickの中にブレークポイントを置いて、毎回呼び出されていることを確認してください。 –