Загрузка формы, выбранные переключатели - PullRequest
0 голосов
/ 01 апреля 2011

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

OnLoad(radioButton2.Checked) 

но это не сработало. Есть идеи?

Ответы [ 2 ]

1 голос
/ 01 апреля 2011

Если я правильно понимаю, у вас есть радио-кнопка на одной из ваших форм (давайте назовем ее form1, чтобы мы могли ее различить), и вы захотите изменить ее при загрузке другой формы (на которую я буду ссылаться здесь)as form2).

Необходимо помнить о нескольких вещах:

  1. Необходимо убедиться, что кнопка доступна снаружи form1.Если обе формы являются частью одного и того же проекта (что, я полагаю, так и есть), вам необходимо убедиться, что кнопка имеет одну из protected internal, internal или public.
  2. form1 на самом деле класс;но форма, которая появляется на вашем экране, это не сам класс form1: это экземпляр класса.Вам понадобится ссылка на этот экземпляр.
  3. Чтобы добраться до члена объекта, вы используете оператор . (точка).Например, если ваш экземпляр form1 был назван myForm1, вам нужно будет набрать myForm1.radioButton2, чтобы обратиться к переключателю.Когда вы опускаете ссылку на объект, по умолчанию используется текущий объект (это объект, код которого выполняется).Поэтому, когда вы вводите код для form1, вы можете опустить ссылку, но для доступа к ней из form2 она вам понадобится (в противном случае компилятор будет думать, что вы пытаетесь достичь чего-то с именем "radioButton2" в пределах form2, который, вероятно, даже не существует).
  4. Переключатель Checked - это свойство (точнее, свойство bool): вы можете получить или установить значениясвойств, но обращение к свойству без каких-либо действий с ним, как правило, бессмысленно, и в большинстве случаев даже не компилируется.
  5. Если вы хотите выполнить код в ответ на какое-то событие, тогда вам нужно зарегистрировать обработчик событий.Обработчик событий - это просто функция, которая возвращает void и принимает пару аргументов (object и EventArgs или некоторый его подкласс).Регистрация обработчика может быть выполнена программно, но вам, вероятно, лучше сделать это от дизайнера.Чтобы создать и зарегистрировать обработчик событий, выполните следующие действия: 5.1.Выберите форму на дизайнере и перейдите в окно «Свойства».5.2.Переключиться на просмотр событий (маленькая иконка молнии) 5.3.Найдите событие, которое вы хотите обработать.В этом случае OnLoad и дважды щелкните по нему.5.4.Вуаля!Дизайнер создал заглушку метода для вашего нового обработчика событий, зарегистрировал его для события и отправил вас в представление кода, чтобы вы могли заполнить его.

Итак, если у вас есть ссылка наваш form1 экземпляр (я скоро расскажу об этом), чтобы пометить переключатель, вам понадобится следующее утверждение:

myForm1.radioButton2.Checked = true;

Это установит свойство Checked radioButton2элемент управления, содержащийся в экземпляре myForm1 класса form1 для true;из-за чего переключатель кажется проверенным.

Теперь, к сочной части: как получить ссылку на форму?Это зависит от того, как вы (или IDE от вашего имени) создали его.Если form1 является формой запуска вашего приложения, и вы придерживаетесь стандартного способа работы в Visual Studio, то взгляните на класс Program, созданный Studio для вашего проекта.Там должна быть функция с именем Main.В какой-то момент вы увидите строку, похожую на эту:

Application.Run(new form1());

часть new form1() создает новый экземпляр form1 и передает его Application.Run() (не беспокойтесь слишкомМного теперь о том, что делает этот звонок, нас интересует только ссылка).Проблема в том, что ссылка используется на лету, а не сохраняется, но мы можем это исправить: добавьте что-то подобное в класс Program, вне Main:

internal static form1 myForm1;

Затем замените Application.Run() вызов с этими двумя линиями:

myForm1 = new form1();
Application.Run(myForm1);

Вызов будет делать то же самое, но разбив его на два этапа, мы получили возможность сохранить ссылку на статическое поле myForm1.Теперь из любой точки вашей программы вы можете использовать Program.myForm1 для обращения к этой форме.Итак, в вашем обработчике событий OnLoad в form2 все, что вам нужно сделать, это:

Program.myForm1.radioButton2.Checked = true;

Несмотря на все это, если вы «звоните» своему form2 из form1, то вы можете сэкономить утомительную работу, проверив кнопку непосредственно перед передачей управления во вторичную форму, что-то вроде этого:

radioButton2.Checked = true;
// Code that shows your "form2" goes here.

В любом случае не забудьте заменить form1 и form2 фактическими именами ваших форм.

Надеюсь, это поможет.

1 голос
/ 01 апреля 2011

Вы должны просто установить someRadioButton.Checked на true.
Нет смысла ждать OnLoad.

Если по какой-то причине вы хотите дождаться Loadсобытие, вам нужно добавить обработчик для события и поместить свой код в обработчик.

...