Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.11.2008, 18:38   #1
Dimon88
Пользователь
 
Регистрация: 18.10.2007
Сообщений: 41
По умолчанию Вопросы по VB 2005

1) Есть несколько форм. Нужно объявить переменную так, что бы она доступна была во всех формах. Как?

2)
...
MyFileName="C:\1.bmp"
PictureBox1.Image = Image.FromFile(MyFileName)
FileOpen(1, MyFileName, OpenMode.Binary)
....
На второй строке возникает ошибка:
The process cannot access the file 'C:\1.bmp' because it is being used by another process.

3)Есть 2 формы. По кнопке на первой форме нужно нарисовать на PictureBox1 (допустим линию), которая находится на второй форме.
Dimon88 вне форума Ответить с цитированием
Старый 08.11.2008, 20:42   #2
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

1.
Код:
Public Class Form2

    Public test As Integer

End Class
2.
В справке написано: <<The file remains locked until the Image is disposed.>>
Читайте из потока:
Код:
        Dim MyFileName As String
        MyFileName = "C:\1.bmp"

        Dim s As New FileStream(MyFileName, FileMode.Open)
        PictureBox1.Image = Image.FromStream(s)
        REM PictureBox1.Image = Image.FromFile(MyFileName)
        s.Dispose()

        Dim FileNumber
        FileNumber = FreeFile()
        FileOpen(FileNumber, MyFileName, OpenMode.Binary, OpenAccess.ReadWrite, OpenShare.Shared)
        FileClose(FileNumber)
3.
Ну скопируйте содержимое, нарисуте на нем и верните обратно:
Код:
        Dim b As Bitmap = New Bitmap(Form2.PictureBox1.Image)
        Dim g As Graphics
        g = Graphics.FromImage(b)
        g.DrawLine(Pens.Black, 10, 10, 20, 20)

        Form2.PictureBox1.Image = b
alexBlack вне форума Ответить с цитированием
Старый 08.11.2008, 22:19   #3
Dimon88
Пользователь
 
Регистрация: 18.10.2007
Сообщений: 41
По умолчанию

Написал:
Dim b As Bitmap = New Bitmap(Form2.PictureBox1.Image)
Dim g As Graphics
g = Graphics.FromImage(b)
g.DrawLine(Pens.Black, 10, 10, 20, 20)
Form2.PictureBox1.Image = b

Ругается на первую строчку:
Object reference not set to an instance of an object.
Dimon88 вне форума Ответить с цитированием
Старый 08.11.2008, 22:59   #4
Dimon88
Пользователь
 
Регистрация: 18.10.2007
Сообщений: 41
По умолчанию

Я создал новый класс (Проект->Add->Class)
Public Class Class1
Public Gys(255) As Integer
End Class
Только как к массиву Gys(255) обратиться теперь?

Последний раз редактировалось Dimon88; 08.11.2008 в 23:04.
Dimon88 вне форума Ответить с цитированием
Старый 09.11.2008, 09:01   #5
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Цитата:
Сообщение от Dimon88 Посмотреть сообщение
Я создал новый класс (Проект->Add->Class)
Public Class Class1
Public Gys(255) As Integer
End Class
Только как к массиву Gys(255) обратиться теперь?
Код:
        Dim a As Class1
        a = New Class1()
        a.Gys(1) = 123
alexBlack вне форума Ответить с цитированием
Старый 09.11.2008, 10:59   #6
Dimon88
Пользователь
 
Регистрация: 18.10.2007
Сообщений: 41
По умолчанию

Цитата:
Сообщение от alexBlack Посмотреть сообщение
Код:
        Dim a As Class1
        a = New Class1()
        a.Gys(1) = 123
На одной форме я заполнил массив. На другой форме все элементы массива равны нулю.
Dimon88 вне форума Ответить с цитированием
Старый 09.11.2008, 11:45   #7
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Цитата:
Сообщение от Dimon88 Посмотреть сообщение
На одной форме я заполнил массив. На другой форме все элементы массива равны нулю.
Наверное, элементы другого массива.

Для чего был Ваш первый вопрос ?
Код:
1) Есть несколько форм. Нужно объявить переменную так, что бы она доступна была во всех формах. Как?
Объявите массив в одной форме как public, создайте его и заполните. Тогда в другой Вы сможете его использовать.

И почитайте, наконец, книжку.
alexBlack вне форума Ответить с цитированием
Старый 09.11.2008, 12:28   #8
Dimon88
Пользователь
 
Регистрация: 18.10.2007
Сообщений: 41
По умолчанию

Я уже пытался через Public объявить. Не получается. На массив во второй форме матерится, говорит не задекларировано. В VB 6.0 так канало, но в VB 2005 не получается.
Dimon88 вне форума Ответить с цитированием
Старый 09.11.2008, 18:56   #9
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Цитата:
Сообщение от Dimon88 Посмотреть сообщение
Я уже пытался через Public объявить. Не получается. На массив во второй форме матерится, говорит не задекларировано. В VB 6.0 так канало, но в VB 2005 не получается.
Показали бы как пытались. Вот это не работает ? :

Код:
Public Class Class1
    Public Gys(255) As Integer
End Class

Public Class Form2

    Public b As Class1 = New Class1()   rem это наш объект

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        MessageBox.Show(b.Gys(1))  rem здесь мы показываем элемент массива
    End Sub
End Class

Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Form2.b.Gys(1) = 5  rem а здесь заполняем массив
        Form2.Show()
    End Sub

End Class
Это работает (только у меня VS 2008), хотя мне такая организация не нравится. Разбросанное по трем файлам обращение к одному классу приведет только к запутыванию кода.
alexBlack вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопросы по if, else? molodoyy Помощь студентам 5 21.03.2010 15:34
Вопросы по if, else? molodoyy Общие вопросы C/C++ 1 25.10.2008 18:55
С++ и Delphi. Вопросы UnD)eaD)Snake Общие вопросы C/C++ 3 21.08.2007 20:11
вопросы MAcK Win Api 7 21.07.2007 18:08