2011-04-06 11 views
3

私はツールストリップボタンを持っています。それをクリックすると、 "押された"または "選択された"ままにしておきたいと思います。スイッチのように。そして私が別のものをクリックすると、もう一度「押し込まれていない」状態にしてください。何か案は?ToolStripButton = "押された"

答えて

6

CheckOnClickプロパティを使用したいと思います。これをtrueに設定すると、ボタンはあなたが記述したとおりに動作するはずです。現在の状態を取得(または設定)するには、Checkedプロパティを使用します。両方がtrueCheckOnClickセットを持って、

public partial class Form1 : Form 
{ 
    private readonly IEnumerable<ToolStripButton> mutuallyExclusiveButtons; 

    public Form1() 
    { 
     InitializeComponent(); 
     mutuallyExclusiveButtons = new[] { firstButton, secondButton }; 
    } 

    private void ToolStripButton_Click(object sender, EventArgs e) 
    { 
     ToolStripButton button = sender as ToolStripButton; 
     if (button != null && button.Checked && 
      mutuallyExclusiveButtons.Contains(button)) 
     { 
      foreach (ToolStripButton item in mutuallyExclusiveButtons) 
      { 
       if (item != button) item.Checked = !button.Checked; 
      } 
     } 
    } 
} 

firstButtonsecondButtonToolStripButton秒であり、そのClickedイベントはToolStripButton_Clickにフックアップ:ここ

は完全に動作するサンプルです。これは、ボタングループに2つ以上のボタンがあり、1つしかチェックされていない場合は、 mutuallyExclusiveButtonsシーケンスに必要な追加ボタンを追加するだけです。

-1

ボタンの状態(押されているか正常か)に関するフラグを維持します。各ボタンを押すごとに、ツールバーのボタンを正しい状態に更新するメソッドを呼び出します(押されたままにするか、通常に戻ります)。

+0

ToolStripButtonは独自のチェック状態を維持します。別のフラグは必要ありません。 –

1

ChrisFが言ったように、あなたが探しているのは「チェック済み」のプロパティです。 (あなたが ToolStripButtons間の相互に排他的なトグルの並べ替えをしたいので、「CheckOnClick」プロパティは、あなたが望むものを実際にはありません。)

あなたが必要なもの(各ボタンのクリックイベントに)コードを配置することですそのボタンのCheckedプロパティをTrueに設定し、他のボタンのCheckedプロパティをFalseに設定します。

実際には、CheckOnClickを使用して、コードを追加して他のボタンをFalseに設定することができます。


チェックをTrueに設定になったとき(うーん...私は疑問に思う;あなたは1つのハンドラに両方のボタンのMouseUpイベントなどイベントをキャプチャして、両方のボタンをオフにした後、CheckOnClickは、適切なものをチェックしますすることができます後で?物事を単純化するという意味で不必要なことを複雑にするオタクの一部)

関連する問題