2013-05-23 3 views
0

Для окончательного проекта в моем классе Visual Basic я делаю версию Battleship для Windows Forms (я называю ее «NavalQuest»: p). Для каждого игрока есть форма, и у меня есть .vb-файл для общедоступной общей информации. В этом файле у меня есть публичный общий суб под названием «Место», который будет вызываться при размещении кораблей. Вот то, что я должен возглавить суб:Ссылка на элемент управления по параметрам sub

Public Shared Sub Place(ByRef form As Form, ByRef board(,) As PictureBox, ByRef picbox As PictureBox) 

Где «форма» это форма, из которой Sub вызывается (или p1 или p2), «доска (,),» 2D-массив изображения коробки, которые являются фактической доской, и «picbox» - поле с изображением, на котором пользователь хочет разместить рассматриваемое судно.

Пользователь выбирает переключатель, «горизонтальный» или «вертикальный», который согласуется с ориентацией судна. Sub проверяет, какой из них щелкнуть. Именно по этой причине у меня есть параметр «form», чтобы ссылаться на форму, на которой находится переключатель, поскольку я не могу просто ссылаться на нее прямо из глобального файла .vb. Однако, когда компьютер считывает:

form.radhoriz.checked 

Она ошибки, прежде чем я даже пытаться бежать, потому что «radhoriz», очевидно, не является свойством Windows.System.Forms.Form. Он не понимает, что я собираюсь управлять формой, а не свойством самой Формы. Даже если бы я должен был создать свойство в каждой форме «radhoriz», ошибка все равно будет существовать, так как «radhoriz» тогда будет свойством «p1board» и «p2board» (имена форм), а не Windows.System. Forms.Form.

Я попытался изменить тип данных параметра только на объект. Не было никаких синих линий ошибок, поэтому я запустил приложение. Ошибка выполнения вошла по той же причине, что и раньше.

Есть ли способ обойти это? Думаю, я мог бы добавить параметры для всех элементов управления, которые я ссылаюсь на форму, но это единственный способ? Спасибо за вашу помощь!

-Ryan

+3

Возможно, вам следует изменить правописание имени приложения, чтобы некоторые не подозревающие пользователи думали, что они будут изучать пуговицы живота. –

+0

Эмбаррирование орфографической ошибки исправлено :) – ThankThePhoenicians

ответ

0

Игнорируя тот факт, что это ужасный общий дизайн ... * Не неожиданным, хотя, так как вы студент! =)

В вашей подписи параметра ...

Изменение:

ByRef form As Form 

To:

ByRef form As frmName 

Где "frmName" это имя вашего игрока формы правления.

Кроме того, измените все ByRef на ByVal.

+0

Ой, забыл, что имя формы становится таким же свойством типа! Благодаря! Да, я просто использовал его как ByRef, потому что я не был уверен, что я что-то изменил в форме. Просто из любопытства, какой будет лучший дизайн? Дизайн - моя самая слабая точка в целом, я бы хотел улучшить это! – ThankThePhoenicians

+0

На самом деле, поцарапайте это, на самом деле этот подход не работает, потому что Sub вызывается из TWO DIFFERENT FORMS ... поэтому вызов его из формы игрока будет проверять переключатель на форме игрока, или наоборот ... – ThankThePhoenicians

+0

Лучшим подходом было бы разделить представление вашей игры и логику с вашим пользовательским интерфейсом.Создайте класс, чтобы удерживать ** состояние ** игры, и вы вызываете методы против этого. Форма (формы) просто отображает текущее состояние. –

Смежные вопросы