ПЕРЕЛІК ДИСЦИПЛІН:
  • Адміністративне право
  • Арбітражний процес
  • Архітектура
  • Астрологія
  • Астрономія
  • Банківська справа
  • Безпека життєдіяльності
  • Біографії
  • Біологія
  • Біологія і хімія
  • Ботаніка та сільське гос-во
  • Бухгалтерський облік і аудит
  • Валютні відносини
  • Ветеринарія
  • Військова кафедра
  • Географія
  • Геодезія
  • Геологія
  • Етика
  • Держава і право
  • Цивільне право і процес
  • Діловодство
  • Гроші та кредит
  • Природничі науки
  • Журналістика
  • Екологія
  • Видавнича справа та поліграфія
  • Інвестиції
  • Іноземна мова
  • Інформатика
  • Інформатика, програмування
  • Юрист по наследству
  • Історичні особистості
  • Історія
  • Історія техніки
  • Кибернетика
  • Комунікації і зв'язок
  • Комп'ютерні науки
  • Косметологія
  • Короткий зміст творів
  • Криміналістика
  • Кримінологія
  • Криптология
  • Кулінарія
  • Культура і мистецтво
  • Культурологія
  • Російська література
  • Література і російська мова
  • Логіка
  • Логістика
  • Маркетинг
  • Математика
  • Медицина, здоров'я
  • Медичні науки
  • Міжнародне публічне право
  • Міжнародне приватне право
  • Міжнародні відносини
  • Менеджмент
  • Металургія
  • Москвоведение
  • Мовознавство
  • Музика
  • Муніципальне право
  • Податки, оподаткування
  •  
    Бесплатные рефераты
     

     

     

     

     

     

         
     
    Індексовані елементи управління
         

     

    Інформатика, програмування

    Індексовані елементи управління

    (автор: Єсін І. В. email: [email protected])

    Про що ...

    Рано чи пізно серйозно освоює програмування, який вивчаєперший систему програмування зіткнеться з необхідністю використовуватимасиви. Кожен елемент масиву визначається своїм індексом, що єневід'ємне ціле число. Кожен масив визначається своїм ім'ям,яке не суперечить правилом побудови імен для змінних. Ще,говорячи про масивах, слід підкреслити, що всі елементи масивуобов'язково однорідні. У контексті сказаного в VB розрізняють, наприклад,масиви елементів управління. Хоча індексовані елементи управління ззагальним іменем у відповідність з аналогією "звичайних" масивів не завжди можнаназвати масивом елементів управління, у статті вони все ж таки будуть називатися
    "масиви елементів управління", що досить поширене.

    У статті на підставі двох прикладів розглядаються багатопереваги використання масивів елементів управління (в належнихвипадках), показується яким чином можна створювати масиви і якзвертатися до їх елементів. Стаття не претендує дати цілковитетлумачення масивів елементів управління. Знання "звичайних" масивівнеобов'язково.

    Приклад перший або

    "з претензією називатися грою"

    Розглянемо задачу, яка ясно виділяє багато перевагвикористання масиву об'єктів. Висновки дозволять зробити два підходи до їїрішенням ...

    На формі вже є картинка PictureBox і дев'ять рівновеликих кнопок
    CommandButton. Імена об'єктів не змінені, а в картинку завантаженамалюнок.

    Причому автор ідеї написав вже такий програмний код:

    Private Sub Form_Load ()
    'напис кнопки - довільна цифра
    Command1 . Caption = Int (9 * Rnd)
    Command2.Caption = Int (9 * Rnd)
    Command3.Caption = Int (9 * Rnd)
    Command4.Caption = Int (9 * Rnd)
    Command5.Caption = Int (9 * Rnd)
    Command6.Caption = Int (9 * Rnd)
    Command7.Caption = Int (9 * Rnd)
    Command8.Caption = Int (9 * Rnd)
    Command9.Caption = Int (9 * Rnd)

    End Sub

    З якого випливає, що після відкриття програми написи кнопок - цифриотримані псевдовипадковою.

    Необхідно відкрити зображення прибираючи кнопку за кнопкою. Причомупочинати треба з кнопки у якої найбільша цифра. Потім вибирається кнопкау якої теж цифра найбільша, але вже серед залишилися і т. д.. Такимчином, остання кнопка - кнопка з найменшою цифрою.

    Довго ...

    Якщо писати обробник клацання по кнопці Command1, то може вийде так:

    Private Sub Command1_Click ()

    If Command1.Caption If Command1.Caption If Command1.Caption If Command1.Caption If Command1.Caption If Command1.Caption If Command1.Caption If Command1.Caption 'якщо цифра кнопки більше або дорівнює кожної іншої, то вибрали потрібну!

    Command1.Visible = False
    ' напис мінус один - щоб уже "невидима" не заважала вибору потрібноїсеред видимих!

    Command1.Caption = -1

    End Sub

    Для "друга" кнопки:

    Private Sub Command2_Click ()

    If Command2.Caption If Command2.Caption If Command2.Caption If Command2.Caption If Command2.Caption If Command2.Caption If Command2.Caption If Command2 . Caption

    Command2.Visible = False

    Command2.Caption = -1

    End Sub

    Для наступних програмні коди аналогічні. Однак, для перевірки приведуобробник для "останньої" кнопки:

    Private Sub Command9_Click ()

    If Command9.Caption If Command9.Caption If Command9.Caption If Command9.Caption If Command9.Caption If Command9.Caption If Command9.Caption If Command9.Caption

    Command9.Visible = False

    Command9.Caption = -1

    End Sub

    Вийшло досить громіздким. Тим не менше, програмний код задовольняєпоставленого завдання.

    Швидко!

    Щоб реалізувати інший підхід необхідно змінити властивість Index увсіх кнопок наступним чином ...

    Змініть властивість Index у кнопки Command1 на 0. У кнопки Command2ім'я на Command1, причому вам треба буде позитивно відповісти напропонований питання середовища розробки. Виконайте останнім вказівку длявсіх інших кнопок.

    У мене зайняло менше часу виконати те, що я вам описав вище.

    Такі приготування нам були просто необхідні, тому щопрограмний код буде зовсім іншим! Ось його лістинг:

    Private Sub Form_Load ()

    For i = 0 To 8

    Command1 (i). Caption = Int (9 * Rnd)

    Next i

    End Sub

    Private Sub Command1_Click (Index As Integer)

    For i = 0 To 8 < p> If Command1 (Index). Caption

    Next i

    Command1 (Index). Visible = False

    Command1 (Index). Caption = -1

    End Sub

    Якщо ви припустити, що обсяг проекту першого підходу більше, ніжпри іншому підході, то будете цілковито праві (8,71 Кб і 4,25 Кбвідповідно).

    Однак, більш докладні пояснення як створювати і звертатися домасивів елементів управління викладемо на наступному прикладі і після нього.

    Приклад другий або

    "сірники дітям - не іграшка!"

    Уявіть, перед вами виклали два коробка , один з яких порожній,а інший наповнений сірниками. Далі вам пропонують вибрати будь-який з них.
    Якщо ви виберіть з двох порожній коробок, то ви виграли, у противному випадку
    - До двох наявних додадуть ще один сірникову коробку і перемішати їхтаємним для вас спосіб. Після вибору порожньої коробки серед трьох, передвами опиниться два, інакше - додадуть ще один і таким же методом. Гразакінчується не на вашу користь, якщо число коробок перевищить дев'яти.

    Уявімо дану програму у вигляді додатку! Для різноманіття,використовуємо інструмент Label (мітка). Розмістимо вибраний інструмент наформі ближче до лівого краю. Ширина кинутої мітки повинна бути в десять -одинадцять разів менше ширини максимізувати вікна. Властивість Indexдорівнює одиниці.
    Властивість BackColor має виділяти всю позначку. Властивість Caption кращезмінити.

    Ще моя задумка не змусить вас турбувати над створенням іншихдев'яти міток, оскільки вони будуть миттєво створені при відкриттіпрограми:

    Private Sub Form_Load ()

    For i = 2 To 10

    Load Label1 (i) 'додаємо ще дев'ять міток

    Next i

    End Sub

    З даної процедури читаємо: "щоб додати об'єкт в масив об'єктівнеобхідно скористатися оператором Load ". Правильно. Скажемо ще, що
    "через пробіл після вказівки оператора напишемо ім'я існуючого масивуоб'єктів, а в дужках вираз, що задає індекс додається елементу ".
    Тут хороша думка про "вираз". Але і це ще не все. Чи буваютьтакі випадки коли не можна (не вийде) додавати (додати) елемент?
    Перевірити правильність можливих припущень можете в наступному розділі статті.

    Тепер спробуйте змінити число 10 у цій процедурі на 32768. Запустітьпрограму і подивіться, що виходить ...

    Перш розглядати наступні процедури, в яких дізнаєтеся, як поводитисядо елементів масиву об'єкта оголосимо змінну:

    Private skolko As Integer 'оголошуємо змінну яка буде повідомлятискільки коробок на столі

    А ось і ті самі процедури:

    Private Sub Form_Initialize ()

    Me.WindowState = 2 'розгорнемо віконце < p> Label1 (2). Left = Label1 (1). Left + Label1 (1). Width + 60 'спочатку виклалидва
    Label1 (2). Visible = True

    skolko = 2

    End Sub

    Private Sub Label1_Click (Index As Integer)

    If Fix (skolko * Rnd) + 1 = Index Then
    'якщо "вгадали" - один забирається

    Label1 (skolko). Visible = False

    skolko = skolko - 1

    Else
    'якщо не вгадали - виставляється ще одна

    Label1 (skolko + 1). Left = Label1 (skolko). Left + Label1 (skolko). Width +
    60

    Label1 (skolko + 1). Visible = True

    skolko = skolko + 1

    End If

    Select Case skolko ' перевірка на виграш і програш

    Case 1

    MsgBox "Ви виграли!": End

    Case 10

    MsgBox "Ви програли. ": End

    End Select

    End Sub

    Звідси робимо висновок:" звертаються до елементів масиву об'єкта наступнимчином ... Пишуть ім'я масиву об'єктів, потім в дужках вираз,вказує індекс елементу і вже після через точку то властивість, якахочуть або змінити, або прочитати ". умовивід приємно як, по суті,так і за формою. Однак, чи можлива помилка при зверненні до елементу? Такможлива, але ... Але про це трохи пізніше.

    Тепер інше питання. У попередньому прикладі я показав два варіантиреалізації завдання: без використання масиву об'єктів та з використаннямйого. А чи можна реалізувати якось по-іншому рішення даної гри, але все -таки теж використовуючи масив об'єктів.

    Так, можна.

    Розглядаємо те саме завдання, ті ж коробки, з використанням тих жемасивів елементів (... але "якось по-іншому ..."). Все та ж форма, всеТого ж Label1 (0), все таже клавіатура ... На мітці виконуємо комбінаціюклавіш Ctrl + C, потім Ctrl + V (відповідаючи позитивно на що з'явився питаннядіалогового вікна середовища розробки). Додайте інформацію, що з'явилася мітку праворуч відщо була позначки. Повторіть ще: Ctrl + V і розмістіть правіше друга.
    Продовжуйте повторення до тих пір поки не розмістите мітку Label1 (9) правішемітки Label1 (8). Тепер виділіть наявні мітки з індексами більшеодиниці. І змініть властивості цих позначок на протилежне - False.
    Label1 (1) і Label1 (0) поміняйте місцями.

    Оголошення змінної залиште таку ж. Залишати ж процедури такимиякими вони є безглуздо, тому що вже в "перших" процедурою --процедурі завантажити програму в пам'ять - з'явиться помилка про неможливістьдодати елемент Label1 (1), так як він уже існує ... Тому видалітьвсі процедури і подивіться, якими вони можуть бути замінені:

    Private Sub Form_Load ()

    Me.WindowState = 2

    skolko = 1 < p> End Sub

    Private Sub Label1_Click (Index As Integer)

    If Fix (skolko * Rnd) + 1 = Index Then
    'якщо "вгадали" - один забирається

    Label1 (skolko). Visible = False skolko = skolko - 1

    Else
    'якщо не "вгадали - виставляється ще одна" skolko = skolko + 1 < p> If skolko 10 Then Label1 (skolko). Visible = True

    End If

    Select Case skolko 'перевірка на виграш і програш

    Case 0

    MsgBox "Ви виграли!": End

    Case 10

    MsgBox "Ви програли.": End

    End Select

    End Sub

    Завершимо розгляд даного прикладу порівнянням. Проект в першому випадкумає розмір 2,46 Кб, в останньому - 8,57 Кб. Однак відкомпілювалися,виконувані модулі за розміром однакові ...
    Інше питання: а яка різниця витраченого часу в обох випадках, якщодруге писати "з нуля"? Відповідь, зрозуміло, суб'єктивна і залежить багато в чому відтого наскільки добре ви знайомі із середовищем розробки, "бачите" реалізаціюкоду і наскільки швидко набираєте її.

    Приклад останній або чому "індексовані елементи управління"?

    Щоб зрозуміти, чому коректніше в деяких випадках говорити
    "індексовані елементи управління c спільним ім'ям", а не "масивелементів управління "розглянемо наступний невеликий приклад.

    На формі кинуті шість кнопок, написи яких замінені зірочками:

    Кнопки мають спільне ім'я M, а індекси у всіх різні: 204, 192, 209, 67,
    200, 194 (в порядку розташування на формі зліва направо). Звідси зрозуміло,що позиція на екрані елементів управління не має значення, навіть якщо уних спільне ім'я.

    А ось і готовий програмний код:

    Private Sub M_Click (Index As Integer)

    M (Index). Caption = Chr (Index ) 'напис кнопки - символ номер indexвзятий з таблиці Ascii-символів

    End Sub

    Що ж виконає комп'ютер за допомогою цих рядків? По-перше, це процедураобробки клацання по одній з кнопок у якій ім'я M, а індекс Index (дорівнює
    67, 192, 194, 200, 204 або 209). По-друге, клацаючи по всіх кнопокпрочитаємо: "МАССИВ".

    Далі в цю ж процедуру впишіть:

    M (68). Caption = "Елемент з індексом 68 не існує"

    Натисніть F5. Клацніть по одній будь-якій кнопці. Вийде помилка: "елементауправління з таким індексом не існує ". Тобто, звертатися до ранішенествореним елементів керування не просто не має сенсу, а викликає крахпрограми. Хоча в звичайному масиві M (67 to 209), елемент M (68) будеіснувати незалежно від того надавали ми якесь значення йомучи ні. Як бачите визначення масиву елементів управління і "звичайного"масиву різні.

    Назвемо все своїми іменами

    Отже, якщо вже багато хто і називають, то чому пояснюється в статті
    "масиви елементів управління", сформулюємо визначення масивів елементівуправління. Крім того, узагальнимо сказане і додамо нове.

    Що?

    Отже, масив елементів управління складається з елементів управління
    (елементи масиву), які створюються при побудові візуальної частиниінтерфейсу користувача і/або довантажують програмно (можуть бутидинамічними). Кожен елемент масиву має унікальний ідентифікаторзваний індексом, який є ціле невід'ємне число, неперевищує 32767 (залежить від ОЗУ). Індекси масиву необов'язковочергуються. Позиція елементів масиву довільна.

    Як?

    Масив елементів можна створити, кидаючи один і той же цікавитьінструмент на форму і змінюючи властивість Index. Крім того, якщо існуєхоча б один елемент керування з чисельним значенням властивості Index, то,можливо, довантажити нові елементи масиву, використовуючи, оператор Load.
    Видаляються догруженние елементи масиву за допомогою оператора Unload.

    Звернення до властивостей елемента масиву здійснюється аналогічно тому,як звертаються до властивостей об'єкту, що не має чисельного значеннявластивості Index.


         
     
         
    Реферат Банк
     
    Рефераты
     
    Бесплатные рефераты
     

     

     

     

     

     

     

     
     
     
      Все права защищены. Reff.net.ua - українські реферати ! DMCA.com Protection Status