2

以下に示すように、実行時に ComboBoxes を動的に追加しています。私が抱えている問題は、ユーザーが使用しているコンボボックスがわからないことです。

たとえば。ユーザーはフォームに 5 つのコンボ ボックスを追加することを決定し、最初のコンボ ボックスに移動して値を選択します。そのコンボ ボックスの値を取得する必要があります。

以下のコードが行っていること - 私のアプローチ

私はコンボボックスを FlowlayoutPanel に追加し、マウスの座標に基づいてその名前を取得しています....ちなみに、これは機能していません...そして、どうすればよいかわかりません。

どんな助けでも大歓迎です。

public partial class Form1 : Form
{
    int count = 0;

    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        count += 1;

        ComboBox cb = new ComboBox();
        cb.Name = count.ToString();
        cb.MouseHover += new EventHandler(doStuff);

        Label lb = new Label();
        lb.Text = count.ToString();

        flowLayoutPanel1.Controls.Add(cb);
        flowLayoutPanel1.Controls.Add(lb);
    }

    public void doStuff(object sender, EventArgs e)
    {
        label1.Text = flowLayoutPanel1.GetChildAtPoint(Cursor.Position).Name;
    }
  }
}
4

5 に答える 5

1
public void DoStuff(object sender, EventArgs e)
{
    var comboBox = sender as ComboBox;
    var name = (comboBox != null ? comboBox.Name : null);
}

このコードは、'sender' パラメーターを ComboBox オブジェクトにキャストし、キャストが正しく行われた場合、ComboBox 名を文字列 'name' に割り当てます。それ以外の場合、'name' は null です。

ヒント: C# のコーディング スタイルでは、メソッド名は大文字で始める必要があります。

于 2012-10-22T09:13:22.483 に答える
1

あなたは試すことができます:

cb.SelectionChangeCommitted += selectionChangedHandler

...

void selectionChangedHandler(object sender, EventArgs e) {
  ComboBox cb = (ComboBox)sender;
  label1.Text = cb.Name;
  // Do whatever else is needed with the combo box
}

SelectionChangeCommitted イベントは、「ユーザーがコンボ ボックスの選択を変更した場合にのみ発生します」。

于 2012-10-22T09:13:38.130 に答える
1

doStuff-eventhandler でイベントを発生させたコンボボックスは、sender-パラメーターにあります。これをチェックボックスにキャストしてみてください:

ComboBox boxThatRaisedTheEvent = (ComboBox)sender;

于 2012-10-22T09:10:43.263 に答える
1
string text = ((ComboBox)this.GetChildAtPoint(pt)).Text;
于 2012-10-22T09:11:37.753 に答える
1

次のようなものを試すことができます:

flowLayoutPanel1.Controls.OfType<ComboBox>().FirstOrDefault(cb => cb.Name.Equals(NAME_OF_COMBOBOX))

またはより良い:

ComboBox box = (ComboBox)sender;
于 2012-10-22T09:21:40.640 に答える