как изменить размер элементов управления в разных панелях или формах (winform) c #

1

В моих формах есть некоторые флажки, а некоторые из них в панелях в определенной форме (два разных вопроса).
Я поместил кнопку, когда пользователь нажимает на нее, размер всех флажков должен меняться (во всех панелях и формах).

И еще один вопрос: как я могу определить, какой тип элементов управления в приложении программно?

Спасибо за вашу помощь.
Я поместил кнопку и добавил обработчик событий.
и для того, чтобы основать тип управления, я использовал имя управления. Вот моя попытка:

            foreach (Control ctrl in this.Controls)
                if (ctrl.Name.Contains("combo"))  
                    checkbox1.SetSize = new Size(40,40);
  • 2
    Вы пробовали что-нибудь? Покажите свой код.
  • 0
    Какая проблема у вас сейчас с первым вопросом? Ваш второй вопрос зависит от вашего использования.
Показать ещё 3 комментария
Теги:
winforms
controls

3 ответа

1

Если вы планируете использовать одну функцию для обработки нескольких событий OnClick, вы можете получить источник из отправителя (отправитель является заданным параметром для реализации обработчика)

(Если это был вопрос, вы должны уточнить, что именно вы хотите сделать, и показать свой соответствующий код)

0

Самый простой способ - использовать этот метод расширения для циклического переключения всех флажков

foreach(var checkBox in this.GetAll<CheckBox>())
    checkBox.Size = new Size(40,40);

Без этого вам придется поочередно перебирать панели

foreach(var panel in this.Controls.OfType<Panel>())
    foreach(var checkbox in panel.Controls.OfType<CheckBox>())
        //set size in panel

foreach(var checkbox in this.Controls.OfType<CheckBox>())
    //set size in form
  • 0
    метод расширения должен быть определен в статическом классе, тогда как я могу использовать его в winform?
  • 0
    @ user3787313 - Методы расширения msdn
0

Изменить в соответствии с комментарием:

Вы можете просмотреть все элементы управления, чтобы найти все флажки:

    private void ProcessControls(Control containerControl)
    {
        foreach (Control control in containerControl.Controls)
        {
            if (control is CheckBox)
            {
                ChangeCheckBoxProperties((CheckBox)control);
            }
            else
            {
                ProcessControls(control);
            }
        }
    }

    private void ChangeCheckBoxProperties(CheckBox cb)
    {
        // ...
    }

Вы можете вызвать этот метод для своей основной формы.

Разумеется, вы должны думать о своем aproach вообще, потому что, если вы используете такие циклы, кажется, что в вашем решении что-то не так.

  • 0
    благодарю вас. Вы правы, это ответ, который я забыл. но каков ответ на мой вопрос?
  • 0
    @ user3787313 Я обновил ответ, поэтому, пожалуйста, проверьте.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню