Вопрос все еще немного неясен, но вот пример:
Исчезновение
Решение 1
Рассмотрите возможность использования свойства Enabled
. Это заставляет элементы управления в групповом поле казаться блеклыми. Тем не менее, его основной функцией является предотвращение взаимодействия пользователя с ними. Вы все еще можете изменять значения программно, хотя. Посмотрите второй пример, если не хотите отключать элементы управления.
Пример 1
private void cb1_SelectedIndexChanged(object sender, EventArgs e)
{
gb1.Enabled = cb1.SelectedIndex == 0;
gb1.Enabled = cb1.SelectedIndex == 1;
// Unless you plan to add more cases to the switch,
// the switch is redundant with the lines above.
//switch (cb1.SelectedIndex)
//{
// case 0:
// gb1.Enabled = true;
// gb2.Enabled = false;
// break;
// case 1:
// gb2.Enabled = true;
// gb1.Enabled = false;
// break;
//}
}
Решение 2
Я не был уверен, но это почти похоже навы хотели просто выполнить визуальное затемнение элементов управления (и не блокировать взаимодействие пользователя с ними), вы можете поэкспериментировать со свойством ForeColor
для каждого отдельного элемента управления. Вы можете установить и восстановить ForeColor индивидуально для каждого элемента управления, или вы можете сделать это, просматривая коллекцию элементов управления GroupBox. Обратите внимание, что цикл, вероятно, полезен только в том случае, если все элементы управления в группе имеют один и тот же начальный передний цвет (который вы также можете сохранить, чтобы вы могли восстановить его).
Тем не менее, это нестандартные WinFormsповедение и может сбить с толку пользователей.
Пример 2
public static readonly Color kFadedColor = Color.DarkGray;
private void SetGroupBoxContentsForeColor(GroupBox aGroupbox, Color aColor)
{
aGroupbox.ForeColor = aColor;
foreach (Control lControl in aGroupbox.Controls)
{
lControl.ForeColor = aColor;
}
}
private void cb1_SelectedIndexChanged(object sender, EventArgs e)
{
// Again, if you need to expand the ComboBox entries,
// this will need additional logic
if (cb1.SelectedIndex == 0)
{
SetGroupBoxContentsForeColor(gb1, mPrevioslySavedColorToRestore);
SetGroupBoxContentsForeColor(gb2, kFadedColor);
}
else
{
SetGroupBoxContentsForeColor(gb2, mPrevioslySavedColorToRestore);
SetGroupBoxContentsForeColor(gb1, kFadedColor);
}
}
Решение 3
Также нестандартно, но, возможно, вы хотите выделить вместо этого групповое поле.
Пример 3
public static readonly Color kHighlightedColor = Color.Orange;
private void cb1_SelectedIndexChanged(object sender, EventArgs e)
{
// Again, if you need to expand the ComboBox entries,
// this will need additional logic
if (cb1.SelectedIndex == 0)
{
gb1.ForeColor = kHighlightedColor;
gb2.ForeColor = mPrevioslySavedColorToRestore;
}
else
{
gb2.ForeColor = kHighlightedColor;
gb1.ForeColor = mPrevioslySavedColorToRestore;
}
}
Примечания:
Исходный метод cb2_SelectedIndexChanged()
использует switch (cb1.SelectedIndex)
вместо switch (cb2.SelectedIndex)
ComboBox3и GroupBox3
Solution
Предполагая, что вы хотите отключить элементы управления для их исчезновения (Fading Solution 1 выше), вы можете сделать следующее. Однако вам может понадобиться добавить дополнительную логику, чтобы проверить состояние ComboBox cb1
и cb2
, если это важно.
Кроме того, если вам нужно gb3
для начала скрыть, либо установите Visible
свойство в конструкторе WinForms или установите gb3.Visible = false;
в конструкторе Forms после вызова метода InitializeComponent()
.
Пример
private void BtnShowGB3_Click(object sender, EventArgs e)
{
// Disable/fade gb1 and gb2
gb1.Enabled = false;
gb2.Enabled = false;
// Make gb3 visible
gb3.Visible = true;
}
private void BtnHideGB3_Click(object sender, EventArgs e)
{
// Enable/unfade gb1 and gb2
gb1.Enabled = true;
gb2.Enabled = true;
// Hide gb3
gb3.Visible = false;
}