Перейти к содержимому

Фотография

Работа с UserForms


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 3

#1 dguminsk

dguminsk

    Новый участник

  • Members
  • Pip
  • 44 сообщений
  • ФИО:Серебрянников Валентин Олегович


Отправлено 17 апреля 2012 - 06:26

Здравствуйте. Прошу Вашей помощи, т.к. все не могу разобраться.
Мне необходимо сделать форму, скажем с 10ю чекбоксами, которые выбирают разные тесты. Все это реализовал, все ок.
Но вот подумалось мне, что необходимо сделать 11й чекбокс, при выборе которого поставяться галочки на все остальные, соответственно при checked false галочки снимуться. Как это реализовать не понимаю. Причем даже логически, т.к. в голове одна идея заключать все в бесконечный цикл и постоянно опрашивать чекбокс. Понимаю, что это глупо, но другого варианта не вижу. Поэтому прошу Вашей подсказки/помощи. Заранее благодарен

Спасибо, помощь уже не нужна. Разобрался с обработчиками событий.


Решение оказалось очень простым, но, вполне возможно не совсем грамотным.
Есть обработчики событий в формах (Events). В одном чекбоксе выбираем Events OnClick и добавляем новый скрипт, в котором и будет идти обработка события.
Мой скрипт выглядит примерно так (На самом деле выглядит жутко, но работает):

function UserForm4_cxCheckBox12_OnMouseEnter(Sender)
{
 if (UserForms.UserForm4.cxCheckBox12.Checked == true){
 UserForms.UserForm4.cxCheckBox1.Checked = true;
 UserForms.UserForm4.cxCheckBox2.Checked = true;
 UserForms.UserForm4.cxCheckBox3.Checked = true;
 UserForms.UserForm4.cxCheckBox4.Checked = true;
 UserForms.UserForm4.cxCheckBox5.Checked = true;
 UserForms.UserForm4.cxCheckBox6.Checked = true;
 }
 else{
 UserForms.UserForm4.cxCheckBox1.Checked = false;
 UserForms.UserForm4.cxCheckBox2.Checked = false; 
 UserForms.UserForm4.cxCheckBox3.Checked = false; 
 UserForms.UserForm4.cxCheckBox4.Checked = false; 
 UserForms.UserForm4.cxCheckBox5.Checked = false; 
 UserForms.UserForm4.cxCheckBox6.Checked = false; 
 }
}

  • 0

#2 anagramma

anagramma

    Активный участник

  • Members
  • PipPip
  • 87 сообщений
  • Город:Moskow

Отправлено 17 апреля 2012 - 07:38

Добрый день! Решением поделитесь, вдруг кому еще понадобится.
Спасибо.


  • 0

#3 modbear

modbear

    Специалист

  • Members
  • PipPipPipPipPip
  • 548 сообщений

Отправлено 18 апреля 2012 - 07:33

Решение оказалось очень простым, но, вполне возможно не совсем грамотным.
Есть обработчики событий в формах (Events). В одном чекбоксе выбираем Events OnClick и добавляем новый скрипт, в котором и будет идти обработка события.
Мой скрипт выглядит примерно так (На самом деле выглядит жутко, но работает):

function UserForm4_cxCheckBox12_OnMouseEnter(Sender)
{
 if (UserForms.UserForm4.cxCheckBox12.Checked == true){
 UserForms.UserForm4.cxCheckBox1.Checked = true;
 UserForms.UserForm4.cxCheckBox2.Checked = true;
 UserForms.UserForm4.cxCheckBox3.Checked = true;
 UserForms.UserForm4.cxCheckBox4.Checked = true;
 UserForms.UserForm4.cxCheckBox5.Checked = true;
 UserForms.UserForm4.cxCheckBox6.Checked = true;
 }
 else{
 UserForms.UserForm4.cxCheckBox1.Checked = false;
 UserForms.UserForm4.cxCheckBox2.Checked = false; 
 UserForms.UserForm4.cxCheckBox3.Checked = false; 
 UserForms.UserForm4.cxCheckBox4.Checked = false; 
 UserForms.UserForm4.cxCheckBox5.Checked = false; 
 UserForms.UserForm4.cxCheckBox6.Checked = false; 
}
}

Мне кажется, лучше обрабатывать не OnClick/OnMouseEnter, а OnChange.

Также могу предложить более короткий, но чуть менее читабельный код:
var form = UserForms.UserForm4;
var state = form.cxCheckBox12.Checked;
for (var i = 1; i <= 6; i++)
  form["cxCheckBox" + i].Checked = state;

  • 2

#4 dguminsk

dguminsk

    Новый участник

  • Members
  • Pip
  • 44 сообщений
  • ФИО:Серебрянников Валентин Олегович


Отправлено 18 апреля 2012 - 08:36

Мне кажется, лучше обрабатывать не OnClick/OnMouseEnter, а OnChange.

Также могу предложить более короткий, но чуть менее читабельный код:

var form = UserForms.UserForm4;
var state = form.cxCheckBox12.Checked;
for (var i = 1; i <= 6; i++)
  form["cxCheckBox" + i].Checked = state;

Просто отлично. У меня была идея насчет цикла, но делал неправильно. Делал примерно так:
var di = 1;
var form = UserForms.UserForm4.cxCheckBox12+di.Checked;
 while (di<=10){
 form;
 di++;
}
Но выпадала ошибка. Как я понял из-за несоответствия типов переменных. Крутил-вертел, да и плюнул на это.
Спасибо Вам большое за данный код. Теперь понял как объектные переменные обрабатывать
  • 0


Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анонимных