Как сделать так, чтобы некоторые групповые блоки на моей панели выглядели блеклыми и не скрытыми? - PullRequest
1 голос
/ 07 октября 2019

У меня есть панель с тремя групповыми окнами. Каждый групповой блок имеет свой элемент управления (комбинированный список, метки, текстовые поля и т. Д.). Groupbox1 используется по умолчанию при загрузке панели. Поле со списком из двух элементов определяет, когда groupbox2 становится видимым, а groupbox1 исчезает, так что пользователь может ввести в него определенную информацию.

из свойств, groupbox1: visible = "true" groupbox2: visible = "false" groupbox3: visible = "false"

Мое намерение состоит в том, что

1) Itemпри выборе ничего не происходит, так как группа по умолчанию и ее элементы управления уже видны.

2) Элемент два делает groupbox1 и его элементы управления скрытыми, а groupbox2 и его элементы управления видимыми. В выпадающем списке groupbox2 есть выпадающий список с похожей функцией, позволяющий переключиться обратно к groupbox1, если выбран второй элемент.

Все это должно происходить во время выполнения.

Существует третья группа box3, которая запускается кнопкой на панели. Я намереваюсь сделать groupbox3 видимым, в то время как все на панели выглядит тусклым, пока не будет нажата кнопка закрытия на groupbox3. я хочу иметь возможность вносить изменения в метки в groupbox1 и groupbox2 с помощью элемента управления combobox в groupbox3.

Моя проблема

1) как мне сделать, чтобы groupbox1 или groupbox2 на панели отображалисьисчез и не полностью скрыт, в то время как groupbox3 всплывает как окно сообщения, а также когда я нажимаю кнопку закрытия на groupbox3, groupbox3 закрывается, пока groupbox1 или groupbox2 снова становится видимым.

    private void panel1_Paint(object sender, PaintEventArgs e)
    {

    }

    private void cb1_SelectedIndexChanged(object sender, EventArgs e)
    {
        gb1.Visible = cb1.SelectedIndex == 0;

        switch (cb1.SelectedIndex)
        {
            case 0:
                gb1.Visible = true;
                gb2.Visible = false;
                break;
            case 1:
                gb2.Visible = true;
                gb1.Visible = false;
                break;
        }
    }

    private void cb2_SelectedIndexChanged(object sender, EventArgs e)
    {
        gb2.Visible = cb2.SelectedIndex == 0;

        switch (cb1.SelectedIndex)
        {
            case 0:
                gb2.Visible = true;
                gb1.Visible = false;
                break;
            case 1:
                gb1.Visible = true;
                gb2.Visible = false;
                break;
        }
    }

    private void bt1_Click(object sender, EventArgs e)
    {
        gb3.Show();
        gb1.Hide();
        gb2.Hide();
    }

    private void bt2_on_gb3_Click(object sender, EventArgs e)
    {
        gb3.Hide();
        gb1.Show();
        gb2.Show();
    }

1 Ответ

0 голосов
/ 10 октября 2019

Вопрос все еще немного неясен, но вот пример:

Исчезновение

Решение 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;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...