2014-02-09 2 views
3

Я хочу сгенерировать сетку в форме в vb6 кнопок. Я работаю над резервированием, поэтому я бы предположил, что генерировать кнопки для каждого выбора (например, A1, E7 и т. Д.) - это путь.Динамическое создание кнопок с помощью кода

Однако я не смог выяснить, как это осуществить.

Я работаю над системой резервирования мест. Поэтому я хотел бы, чтобы сетка была сформирована из числа мест, введенных через базу данных (не имеет значения, но что такое сено).

Так, например, если общее количество мест было 100, я бы хотел, чтобы форма создавала сетку 10x10 кнопок. Когда одна из кнопок нажата (каждая из них уникальна), я могу зарезервировать их, изменив/добавив место в зарезервированную таблицу в базе данных.

пытался найти решения повсеместно, но, похоже, в VB6 нет ответа на этот вопрос.

+1

Вам понадобится использовать массив управления. Взгляните на это: http://forums.devx.com/showthread.php?174949-How-to-create-a-dynamic-control-array-with-100-commandbuttons –

+1

Возможный дубликат [Сделать контрольный массив в код] (http://stackoverflow.com/questions/16048634/make-control-array-in-code) –

+0

У вас может возникнуть проблема с этим подходом. Добавление большого количества элементов управления в форму приведет к серьезному ухудшению производительности вашего приложения. Вы можете узнать здесь немного подробнее: http://support.microsoft.com/kb/229756 – jac

ответ

2

Смотрите ниже для того, что вы просите:

'1 form with 
' 1 commandbutton: name=Command1 index=0 
Option Explicit 

Private Sub Command1_Click(Index As Integer) 
    Caption = CStr(Index) 
End Sub 

Private Sub Form_Load() 
    Dim lngIndex As Long 
    For lngIndex = 1 To 100 
    Load Command1(lngIndex) 
    Next lngIndex 
    For lngIndex = 0 To Command1.UBound 
    With Command1(lngIndex) 
     .Caption = CStr(lngIndex) 
     .Visible = True 
    End With 'With Command1(lngIndex) 
    Next lngIndex 
End Sub 

Private Sub Form_Resize() 
    Dim lngIndex As Long 
    Dim sngWidth As Single, sngHeight As Single 
    Dim lngRow As Long, lngCol As Long 
    sngWidth = ScaleWidth/10 
    sngHeight = ScaleHeight/10 
    For lngIndex = 0 To Command1.UBound 
    lngRow = lngIndex \ 10 
    lngCol = lngIndex Mod 10 
    Command1(lngIndex).Move lngCol * sngWidth, lngRow * sngHeight, sngWidth, sngHeight 
    Next lngIndex 
End Sub 

Будьте осторожны, хотя, как много контроля на 1 форме может замедлить Perfomance намного

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

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

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