2

次のコードを使用して、FlowLayoutPanelにLabelを動的に追加しました。

private void button1_Click(object sender, EventArgs e)
    {
        Label lb = new Label();
        lb.Text = "How are You";
        lb.Size = new Size(650, Font.Height +10);
        flowLayoutPanel1.Controls.Add(lb);
        flowLayoutPanel1.SetFlowBreak(lb, true);
        lb.BackColor = Color.Wheat;
    }

ContextMenuStripでは、2 つの項目の追加と編集を追加し、それをFlowLayoutPanelに関連付けました。つまり、ユーザーがFlowLayoutPanelを右クリックすると、編集と削除のメニューが表示されます。

ここで、削除ボタン (ContextMenuStrip ) を使用して、動的に追加されたラベルを削除したいと考えています。欲求レベルを右クリックしたいだけで、右クリック後に削除する必要があります。編集用の編集ボタンと同じケース。

4

1 に答える 1

3

lb 変数への参照を (関数内だけでなく) フォーム上に保持します。削除する場合は、flowLayoutPanel1.Controls.Remove(lb) を呼び出します。

ラベルの右クリック イベントで呼び出される同じサブ内のラベルに、イベント ハンドラーを追加する必要があります。このハンドラーの内部は、上記の .Remove の呼び出しがあるべき場所です。

または、イベント ハンドラーは送信者オブジェクトを渡します。これは、イベントが発生したコントロールへの参照になります。.Remove を呼び出して送信者を渡すだけです。他に必要でない限り、このようにラベルへの参照を保持する必要はありません。

依頼例

flowLayoutPanel1.Controls.Remove((ToolStripMenuItem) sender);

コメント後に再度編集

ボタン1のクリックイベントをに変更しました

private void button1_Click(object sender, EventArgs e)
{
     lb = new Label();
    lb.Text = "How are You";
    lb.Size = new Size(650, Font.Height +10);
    flowLayoutPanel1.Controls.Add(lb);
    flowLayoutPanel1.SetFlowBreak(lb, true);
    lb.BackColor = Color.Wheat;
    lb.MouseEnter += labelEntered;
}

ご覧のとおり、MouseEntered イベント ハンドラーを追加して、マウスが上にあった最後のラベルをキャッチしました。

上記のハンドラーである次のサブを追加しました。マウスが上にあった最後のラベルを記録するだけです。

private Label lastLabel;
private void labelEntered(object sender, EventArgs e)
{
    lastLabel = (Label)sender;
}

削除ボタンのコードはこれに変更されました。

public void Remove_Click(object sender, EventArgs e)
{
    if (lastLabel != null)
    {
        flowLayoutPanel1.Controls.Remove(lastLabel);
        lastLabel = null;
    }
}

最初に、lastLabel に値があることを確認します。値がある場合は、マウスが上にあった最後のラベルを削除し、lastLabel 変数をクリアします。

于 2011-10-25T04:17:55.867 に答える