2

多くの個別のコントロールにプロパティがあることを私は知っていReadOnlyます。しかし、GroupBox多くの異なるコントロール(テキストボックス、コンボボックス、ラジオボタンなど)があるとすると、ReadOnlyこれらすべてのコントロールのプロパティを一緒に設定することは可能ですか?

特定のグループ内のコントロールにこのプロパティを設定したいだけではありませんGroupBox(複数のGroupBoxもあるため、他のGroupBoxのコントロールに設定を行わせたくないため)。

プロパティを手動で設定するReadOnlyことは、それぞれに20ものコントロールがあるため、非常に無気力に思えますGroupbox(理由を聞かないでください:p)。

4

4 に答える 4

4

Winformの標準コントロールの場合、次のようなものを使用できます(TextBoxBaseはReadOnlyプロパティコントロール の基本クラスです):

    private void button1_Click(object sender, EventArgs e)
    {
        SetReadonlyControls(groupBox1.Controls);
    }

    private void SetReadonlyControls(Control.ControlCollection controlCollection)
    {
        if (controlCollection == null)
        {
            return;
        }

        foreach (TextBoxBase c in controlCollection.OfType<TextBoxBase>())
        {
            c.ReadOnly = true;
        }
    }
于 2013-03-24T13:44:34.397 に答える
2

無効にするだけで十分な場合は、グループボックスを無効にすることができ、子も無効になります。

入力を読み取り専用に設定する場合は、子を反復処理する必要があります。子にIsReadOnlyプロパティがあるかどうかをリフレクションを使用して調べてから、それを設定します。

于 2013-03-24T10:24:15.400 に答える
1

Daniilの答えを使用すると、ComboBoxesとRadioButtonsも存在するとおっしゃっていたので。このコード:

TextBoxBase c in controlCollection.OfType<TextBoxBase>() 

RadioButtonsとComboBoxesをキャッチできなくなります。次のforeachループも追加する必要があります。

private void button1_Click(object sender, EventArgs e)
    {
        SetReadonlyControls(groupBox1.Controls);
    }

    private void SetReadonlyControls(Control.ControlCollection controlCollection)
    {
        if (controlCollection == null)
        {
            return;
        }
        foreach (RadioButton r in controlCollection.OfType<RadioButton>())
        {
            r.Enabled = false; //RadioButtons do not have readonly property
        }
        foreach (ComboBox c in controlCollection.OfType<ComboBox>())
        {
            c.Enabled = false;//ComboBoxes do not have readonly property
        }
        foreach (TextBoxBase c in controlCollection.OfType<TextBoxBase>())
        {
            c.ReadOnly = true;
        }
    }

編集 :

すべてのコントロールがgroupbox1内にあることを確認してください。

于 2016-05-12T16:03:29.063 に答える
0
 public void SetReadonlyControls(Control.ControlCollection controlCollection)
        {
            if (controlCollection == null)
            {
                return;
            }
            foreach (RadioButton r in controlCollection.OfType<RadioButton>())
            {
                r.Enabled = false; //RadioButtons do not have readonly property
            }
            foreach (ComboBox c in controlCollection.OfType<ComboBox>())
            {//AQUE
                var text = new TextBox();
                controlCollection.Add(text);
                text.Text = c.Text;
                text.Location = c.Location;
                text.Size = c.Size;
                text.Visible = true;`enter code here`
                c.Visible = false;
               /* c.Enabled = false;//ComboBoxes do not have readonly property
                c.ForeColor = System.Drawing.Color.White;
               c.DropDownStyle = ComboBoxStyle.Simple;*/
            }
            foreach (TextBoxBase c in controlCollection.OfType<TextBoxBase>())
            {
                c.ReadOnly = true;
            }
            foreach (DateTimePicker c in controlCollection.OfType<DateTimePicker>())
            {
                c.Enabled = false;
            }
        }
于 2018-06-13T19:22:26.380 に答える