Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 19.11.2012
Сообщений: 114

Массив и ошибка

09.10.2013, 11:51. Показов 622. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вообщем решил сделать календарь с заметками. Так вот, что - то я делаю не так.
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
Public Class Form1
    Dim CalM()()() As String
 
 
 
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        If (Button1.Width = 240) Then
            MonthCalendar1.Visible = True
            Button1.Width = 100
            Button1.Height = 50
            Button1.Location = New Point(345, 12)
            Button1.Font = New Font(Button1.Font.Name, 8)
            Button1.Text = "Скрыть календарь"
            Label1.Visible = True
 
        Else
            MonthCalendar1.Visible = False
            Button1.Width = 240
            Button1.Height = 87
            Button1.Location = New Point(267, 287)
            Button1.Font = New Font(Button1.Font.Name, 20)
            Button1.Text = "Открыть календарь"
            Label1.Visible = False
        End If
 
    End Sub
 
 
 
    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        MonthCalendar1.Location = New Point(153, 173)
        MonthCalendar1.Width = 500
        MonthCalendar1.Height = 311
        Button2.Visible = False
        Button1.Visible = True
        Label1.Text = "Нажмите на дату, для перехода к заметкам"
        TextBox1.Visible = False
        Button3.Visible = False
    End Sub
 
    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
        CalM(MonthCalendar1.SelectionStart.Day)(MonthCalendar1.SelectionStart.Month)(MonthCalendar1.SelectionStart.Year) = TextBox1.Text
    End Sub
 
    Private Sub MonthCalendar1_DateSelected(sender As Object, e As DateRangeEventArgs) Handles MonthCalendar1.DateSelected
        MonthCalendar1.Width = 164
        MonthCalendar1.Height = 460
        MonthCalendar1.Location = New Point(3, 69)
        Button2.Visible = True
        Button1.Visible = False
        Label1.Text = "Здесь вы можете сделать заметки на день"
        TextBox1.Visible = True
        Button3.Visible = True
 
        If CalM(MonthCalendar1.SelectionStart.Day)(MonthCalendar1.SelectionStart.Month)(MonthCalendar1.SelectionStart.Year) <> "" Then ' На этой строчке вылетает ошибка
            TextBox1.Text = CalM(MonthCalendar1.SelectionStart.Day)(MonthCalendar1.SelectionStart.Month)(MonthCalendar1.SelectionStart.Year)
        End If
    End Sub
End Class
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.10.2013, 11:51
Ответы с готовыми решениями:

Двумерный массив (массив массивов): ошибка, выводимая IntelliSense
не могу понять в чем проблема, выдает ошибку при использовании двумерного массива, причем хоть ошибка и высвечивается в студии программа...

Двумерный массив.Найти сумму элементов в каждом столбце и занести ее в новый одномерный массив.Где ошибка?
program Project14; {$APPTYPE CONSOLE} uses SysUtils; type mas1=array of integer; mas2=array of integer; Var...

Массив, Си++, ошибка
Ошибка: Too many initializations. Подскажите, пожалуйста, как ее исправить. int mas = { {1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, ...

7
118 / 107 / 17
Регистрация: 10.02.2013
Сообщений: 278
09.10.2013, 12:25
BuJIJI, если речь идет о многомерных массивах, я обычно использую так:
VB.NET
1
Dim CalM(31, 12, 2099) As String 'указываем сразу размерность массива
и далее в коде замени
VB.NET
1
CalM(MonthCalendar1.SelectionStart.Day)(MonthCalendar1.SelectionStart.Month)(MonthCalendar1.SelectionStart.Year)
на
VB.NET
1
CalM(MonthCalendar1.SelectionStart.Day, MonthCalendar1.SelectionStart.Month, MonthCalendar1.SelectionStart.Year)
1
0 / 0 / 0
Регистрация: 19.11.2012
Сообщений: 114
09.10.2013, 15:00  [ТС]
Помогло! Спасибо большое!

Добавлено через 1 час 7 минут
Напишу в эту же тему) Теперь надо это дело Сохранить и прочитать.
Сохраняю я вот так:
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
   CalM(MonthCalendar1.SelectionStart.Day, MonthCalendar1.SelectionStart.Month, MonthCalendar1.SelectionStart.Year) = TextBox1.Text
            Dim fw As StreamWriter
            Dim ReadString As String
            Try
 
                fw = New StreamWriter("C:\Test1.txt", False)
                ReadString = MonthCalendar1.SelectionStart.Day
                fw.WriteLine(ReadString)
                ReadString = MonthCalendar1.SelectionStart.Month
                fw.WriteLine(ReadString)
                ReadString = MonthCalendar1.SelectionStart.Year
                fw.WriteLine(ReadString)
                ReadString = TextBox1.Text
                fw.WriteLine(ReadString)
 
            Finally
 
                fw.Close()
            End Try
Соответсвенно в файле примерно получается такая картина:
10
10
2013
Т
е

кс
т

.

Как мне вот это делать считать и обратно в массив запихнуть ума не приложу) Кто-то подскажет?
0
835 / 643 / 101
Регистрация: 20.08.2013
Сообщений: 2,524
11.10.2013, 16:50
Никак, если текстовое поле может содержать многострочный текст.
Надо записывать по-другому, чтобы этих проблем не было.
0
118 / 107 / 17
Регистрация: 10.02.2013
Сообщений: 278
11.10.2013, 18:19
Цитата Сообщение от Qwertiy Посмотреть сообщение
Никак, если текстовое поле может содержать многострочный текст.
Надо записывать по-другому, чтобы этих проблем не было.
Почему никак? все можно сделать, сериализация например. Но многомерные массивы невозможно сериализовать, поэтому вот че намудрил:
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
Public Sub saveSettings()
    Dim fs As New FileStream("settings.dat", FileMode.Create, FileAccess.Write, FileShare.ReadWrite)
    Dim DD As New Dictionary(Of Integer, Dictionary(Of Integer, Dictionary(Of Integer, String)))
    Dim bf As New BinaryFormatter
    For i = 0 To CalM.GetLength(0) - 1
        Dim MM As New Dictionary(Of Integer, Dictionary(Of Integer, String))
        For i1 = 0 To CalM.GetLength(1) - 1
            Dim YYYY As New Dictionary(Of Integer, String)
            For i2 = 0 To CalM.GetLength(2) - 1
                If CalM(i, i1, i2) <> "" Then YYYY.Add(i2, CalM(i, i1, i2))
            Next
            MM.Add(i1, YYYY)
        Next
        DD.Add(i, MM)
    Next
    bf.Serialize(fs, DD)
    fs.Close()
End Sub
 
Public Sub loadSettings()
    Dim DD As New Dictionary(Of Integer, Dictionary(Of Integer, Dictionary(Of Integer, String)))
    Dim fs As New FileStream("settings.dat", FileMode.Open, FileAccess.Read, FileShare.Read)
    Dim bf As New BinaryFormatter
    DD = bf.Deserialize(fs)
    For Each i In DD.Keys
        Dim MM As Dictionary(Of Integer, Dictionary(Of Integer, String)) = DD(i)
        For Each i1 In MM.Keys
            Dim YYYY As Dictionary(Of Integer, String) = MM(i1)
            For Each i2 In YYYY.Keys
                CalM(i, i1, i2) = YYYY(i2)
            Next
        Next
    Next
    fs.Close()
End Sub
все должно работать, просто вызываешь saveSettings для сохранения массива с заметками, и loadSettings для загрузки настроек.
0
835 / 643 / 101
Регистрация: 20.08.2013
Сообщений: 2,524
11.10.2013, 18:43
Цитата Сообщение от Leksar Посмотреть сообщение
Почему никак? все можно сделать, сериализация например.
Я сказал, что никак нельзя распарсить при текущем формате записи. Например, потому что я могу запихнуть в текстбокс содержимое этого файла. Тем не менее, если формат записи изменить (соответствующим образом), то всё будет можно.
По-твоему, сериализация - это не изменение формата записи?

Цитата Сообщение от Leksar Посмотреть сообщение
Но многомерные массивы невозможно сериализовать
Не правда... Наверное...

Цитата Сообщение от Leksar Посмотреть сообщение
поэтому вот че намудрил
Ой.. Даже читать лень...
Только Dictionary там и не хватало... Хотя, если подумать, то изначальный подход с массивом 31*12*2099 ещё больший бред. Тем более в таком порядке размерностей.
0
118 / 107 / 17
Регистрация: 10.02.2013
Сообщений: 278
11.10.2013, 18:50
зато работает

Не по теме:

может сам предложишь что-нибудь?

0
835 / 643 / 101
Регистрация: 20.08.2013
Сообщений: 2,524
11.10.2013, 19:01
Цитата Сообщение от Leksar Посмотреть сообщение
может сам предложишь что-нибудь?
Самый банальный способ, с минимальными измененими существующего кода - это как-то по другому записывать текстовые данные. Как-то так, чтобы они занимали одну строку.
Один из вариантов - вызвать конвертирование в base64. Всего одна строка кода и всё хорошо, но у него очевидные минусы: во-первых, файл уже становится нечитаемым через обычный текстовый просмотрщик, а во-вторых, малейшее повреждение закодированных данных в файле не позволит потом раскодировать эту запись.
Другой вариант - экранировать символы по аналогии с экранированием символов внутри строк в си-подобных языках. Если подумать, то достаточно экранирования обратных слешей и переводов строк. Но функцию экранирования придётся писать самому. Хотя, можно воспользоваться обычным Replace для кодирования, раскодировать так легко не выйдет.
Ну и совсем альтернативный вариант - ни как не менять текст, но добавлять перед ним число строк. Делает неудобным ручное редактирование и незначительно усложняет парсинг файла.

Я бы выбрал экранирование.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.10.2013, 19:01
Помогаю со студенческими работами здесь

массив - ошибка
Определить есть ли в массиве Q(50) заданное число Х, если нет то определить ближайщее к нему. #include &lt;stdio.h&gt; #include...

Массив и ошибка
После того, как ввожу какое-либо значение, компилятор выдаёт ошибку: Exception in thread &quot;main&quot;...

Массив ошибка
Всем привет. Помогите с решением проблемы. Скрипт явно не хочет полноценно работать. По видимому это как-то связанно с массивом, но вот что...

[C++] В чем ошибка массив
Прога ловит краш когда 1 число больше 2го.. По ходу ошибся в работе с массивами. /* Дан двумерный массив из четного числа строк....

Ошибка ввода в массив
#include &lt;iostream&gt; using namespace std; int main() { cout &lt;&lt; &quot;vvedite colovo chisel: &quot;; int q = 0; cin &gt;&gt; q; int s =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru