1

この方法でコンボボックスを「読み取り専用」にしています:

private void comboBox1_SelectedValueChanged(object sender, EventArgs e)
{
     // for this to work, set the comboboxes' Tag to its SelectedIndex after setting that
    ComboBox cb = sender as ComboBox;
     int validSelection = Convert.ToInt32(cb.Tag);
    if (cb.SelectedIndex != validSelection )
    {
        cb.SelectedIndex = validSelection;
    } 
}

...そして、フォーム上のすべてのコンボボックスを次のようにそのハンドラーに設定しようとしています:

foreach (Control c in this.Controls)
{
    if (c is ComboBox)
    {
        (c as ComboBox).SelectedValueChanged += comboBox1_SelectedValueChanged;
    }
}

...しかし、if 条件が true になることはありません。フォーム上に複数の ComboBox があります...???

4

2 に答える 2

5

ComboBoxは、他のパネル内にある可能性があります。

それらを再帰的に調べてみてください。

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

private void ChangeCombos(Control parent) {
  foreach (Control c in parent.Controls) {
    if (c.Controls.Count > 0) {
      ChangeCombos(c);
    } else if (c is ComboBox) {
      (c as ComboBox).SelectedValueChanged += comboBox1_SelectedValueChanged;
    }
  }
}
于 2012-07-18T18:26:35.443 に答える
1

begin { にブレークポイントを設定して c.gettype() を呼び出す

また、あなたはこれをしたいかもしれません

if( c.gettype() == typeof(ComboBox))
{

}
于 2012-07-18T18:16:33.473 に答える