2011-07-20 30 views
3

私はアクションを実行するToolStripButtonを持っています。ユーザーがボタンをクリックすると、アクションが2回実行されないようにボタンが無効になります。アクションが完了すると、ボタンが再び有効になります。これはすべて正常に動作します。例外:ToolStripButton「外観をリセットする」/「放置イベント」

ボタンが無効になっているため、「MouseLeave」イベントが発生しないため、ボタンの外観は更新されません。完全に明確にするために、マウスがToolStripButtonに入ると、ボタンはオレンジ色(デフォルト)で強調表示され、周囲に黒いボックスが表示されます。このハイライトは、ボタンを再び有効にすると削除されません。マウスカーソルは、この時点では、コントロールからずっと離れています。ボタンをマウスで移動すると、ボタンを再描画して自然に修正されます。

私がしたいのは、その外観を「リセット」するToolStripButtonのメソッドです。そのようなメソッドはToolStrip上に存在することさえありますが、検索にもかかわらず、私はこのようなものを見つけることができませんでした。

代わりに、ボタン上で「マウス離脱」イベントを直接発生させることができます。私の知る限り、C#.NETでこれを簡単に行う方法はありません。

この時点でのアドバイスは一番高く評価されますが、当然のことながら私のアプリケーションを壊してツールストリップを交換することは望ましくありません。

+0

'アクション'とは何ですか? UIはフリーズしていますか?実際にボタンがグレーになっていますか? –

答えて

1

更新: 私はあなたの問題を再現しました。私はクリックイベントにスタイルをリセット

private void toolStripButton1_Click(object sender, EventArgs e) 
    { 
     toolStripButton1.BackColor = Color.FromKnownColor(KnownColor.Control); 
     toolStripButton1.Enabled = false; 
    } 

    private void toolStripButton1_MouseEnter(object sender, EventArgs e) 
    { 
     toolStripButton1.BackColor = Color.Red; 
    } 

    private void toolStripButton1_MouseLeave(object sender, EventArgs e) 
    { 
     toolStripButton1.BackColor = Color.FromKnownColor(KnownColor.Control); 
    } 

以外の良い方法を取得できませんでした

は、この情報がお役に立てば幸い!


Control.Invalidate()を試したことがありますか?

MSDN:コントロールの表面全体を無効にし、コントロールを再描画させます。

+0

私はControl.Invalidate()を試みましたが、再描画はちょうどそれ、再描画、コントロールは単に "マウスオーバー"状態で再描画されます。 –

0

私は同じ問題を抱えていました。タスクが完了した後に、Visibleプロパティを使用して、非表示にしてからToolStripButtonを表示して固定しました。 ToolStripまたはのToolStripItemを無効にする前に

0

private void RemoveHighlightFromToolStrip(ToolStrip toolStrip) 
     { 
      foreach (ToolStripItem item in toolStrip.Items) 
      { 
       if (item.Pressed || item.Selected) 
       { 
        item.Visible = false; 
        item.Visible = true; 
       } 
      } 
     } 

もあなただけの非表示と表示し、全体のToolStripを、これはあなたの形で他のコントロールに影響を与える可能性があることができます(あなたには、いくつかのドッキングのDataGridViewを持っている場合、すなわち、それは再描画されます)

関連する問題