1

グループボックス、チェックボックス、およびボタンを含めるために、ac#フォームアプリケーションでカスタムユーザーコントロールを作成しました。

私のメイン アプリでは、これらのコントロールをフロー レイアウト パネルに追加して、初期値を設定できます。

問題は、項目が既にフロー レイアウト パネルにある後、ボタン イベントとチェックボックスにアクセスするにはどうすればよいかということです。

private void btnAdd_Click(object sender, EventArgs e)
{
    AttributeListItem.AttributeListItem at = new AttributeListItem.AttributeListItem();
    at.groupbox.Text = lbxLDAPFields.GetItemText(lbxLDAPFields.SelectedItem);
    flPanel.Controls.Add(at);
    // button name is btnEdit
}
4

2 に答える 2

1

イベントとパブリック プロパティを使用します。デザイナーに各項目を追加しているように聞こえるので、イベント ハンドラーを接続し、名前を割り当ててユーザー コントロールのプロパティにアクセスし、後で見つけることができます。これは非常に大まかな例ですが、うまくいくでしょう。

ユーザーコントロール

public partial class MyCustomUserControl : UserControl
{
    public event EventHandler<EventArgs> MyCustomClickEvent;
    public MyCustomUserControl()
    {
        InitializeComponent();
    }
    public bool CheckBoxValue
    {
        get { return checkBox1.Checked;}
        set { checkBox1.Checked = value; }
    }
    public string SetCaption
    {
        get { return groupBox1.Text;}
        set { groupBox1.Text = value;}
    }

    private void button1_Click(object sender, EventArgs e)
    {
        MyCustomClickEvent(this, e);

    }
}

フォーム1

public partial class Form1 : Form
{
    int count =1;
    public Form1()
    {
        InitializeComponent();
    }

    private void mcc_MyCustomClickEvent(object sender, EventArgs e)
    {
        ((MyCustomUserControl)sender).CheckBoxValue = !((MyCustomUserControl)sender).CheckBoxValue;
    }

    private void button1_Click(object sender, EventArgs e)
    {
        MyCustomUserControl mcc = new MyCustomUserControl();
        mcc.MyCustomClickEvent+=mcc_MyCustomClickEvent;
        mcc.Name = "mmc" + count.ToString();
        mcc.SetCaption = "Your Text Here";
        flowLayoutPanel1.Controls.Add(mcc);
        count += 1;

    }

    private void button2_Click(object sender, EventArgs e)
    {
        var temp = this.Controls.Find("mmc1", true);
        if (temp.Length != 0)
        {
            var uc = (MyCustomUserControl)temp[0];
            uc.SetCaption = "Found Me";
        }    
    }
}
于 2014-02-05T06:14:22.713 に答える