4

Windowsフォームでtoolstripdropdownを使用して、別のボタンをクリックするとボタンのリストを表示しました。

var td = new ToolStripDropDown
        {
            AutoSize = true,
            DropShadowEnabled = false,
            BackColor = Color.Transparent,
            Margin = Padding.Empty,
            Padding = Padding.Empty
        };

        var host = new ToolStripControlHost(panel)
        {
            BackColor = Color.Transparent,
            Margin = Padding.Empty,
            Padding = Padding.Empty
        };

        td.Items.Add(host);

パネルには、表示されるボタンのリストが含まれています。パネルをユーザーに表示するには、ボタン(表示)をクリックして、次の行が呼び出されます。

td.Show(pointonScreen);

デフォルトでAutoCloseは、true に設定されています。そのため、ユーザーがフォームのどこかをクリックすると、toolstripdropdown が閉じられます。これで結構です。

私の要件:

  1. 表示ボタンをクリック
  2. td.show() を呼び出して toolstripdropdown を表示し、次の場合はポップアップを閉じます。td.Visible
  3. もう一度 [表示] ボタンをクリックします。
  4. toolstripdrown を閉じる必要があります
  5. フォーム内の任意の場所をクリックします。toolstripdropdown が表示されている場合は閉じます。

現在、ステップ 3 で、ボタン クリック イベントが発生する前に、toolstripdropdown が閉じられています。再びドロップダウンが表示されます。

私の要件を達成する他の方法はありますか?

4

1 に答える 1

6

Closingドロップダウンを開いたボタンをクリックしてドロップダウンを閉じる場合は、ドロップダウンのイベントを処理し、フラグを設定する必要があります。次に、ボタンをクリックしてフラグを確認し、フラグがない場合はドロップダウンを表示してフラグを設定し、そうでない場合はドロップダウンを閉じてフラグをクリアします。

ToolStripDropDown td;
private void Form1_Load(object sender, EventArgs e)
{
    td = new ToolStripDropDown { /*...*/};
    var host = new ToolStripControlHost(this.panel1){ /*...*/};
    td.Items.Add(host);
    td.Closing += td_Closing;
}
void td_Closing(object sender, ToolStripDropDownClosingEventArgs e)
{
    if (e.CloseReason == ToolStripDropDownCloseReason.AppClicked)
        if (this.button1.Bounds.Contains(this.PointToClient(MousePosition)))
        {
            td.Tag = true;
            return;
        }
    td.Tag = null;
}
private void button1_Click(object sender, EventArgs e)
{
    if (td.Tag == null)
    {
        td.Show(Cursor.Position);
        td.Tag = true;
    }
    else
    {
        td.Close();
        td.Tag = null;
    }
}
于 2016-04-21T11:45:18.507 に答える