Методы формы Hide и Show.

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

Ефрейтор
Обычный пользователь
Обычный пользователь
 
Сообщения: 65
Зарегистрирован: 11.02.2005 (Пт) 12:43
Откуда: Алтай

Методы формы Hide и Show.

Сообщение Ефрейтор » 05.03.2006 (Вс) 21:20

Недавно перешёл с VB.6 на VB.NET. Но почему то скрыть форму получается, показать нет (?!) выдаёт ошибку.
вроде всё элементарно в VB.6 эта логика работает:
Form1.Hide()
Form1.Show()
в последней строчке ошибка. Мозги уже закипели.
В чём хитрость?
И ещё как сделать форму модальной? У создаваемых форм это свойство только для чтения. А мне в последствии эту форму придётся запускать из приложения типа Экселя, и мне она там нужна модальная.
Понимаю, вопросы дебильные, но помогите дураку, люди добрые. :?

NicSoft
Обычный пользователь
Обычный пользователь
 
Сообщения: 80
Зарегистрирован: 05.04.2003 (Сб) 18:51
Откуда: Егорьевск

Сообщение NicSoft » 05.03.2006 (Вс) 22:34

Dim frm as New Form1
frm.ShowDialog

baha76
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 168
Зарегистрирован: 07.01.2004 (Ср) 10:59
Откуда: Ташкент

Сообщение baha76 » 06.03.2006 (Пн) 7:03

В библиотеке MSDN много чего описано, советую активно пользоваться ею.

Ефрейтор
Обычный пользователь
Обычный пользователь
 
Сообщения: 65
Зарегистрирован: 11.02.2005 (Пт) 12:43
Откуда: Алтай

Сообщение Ефрейтор » 06.03.2006 (Пн) 16:48

Да MSDN понятно помогает, но тут какой то подход хитрый.
пыжился я пыжился.

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim NewForm As New Form1()
Form1.ActiveForm.Hide()
NewForm.ShowDialog()
End Sub

модальная форма получается только после какого то события в данном случае клика на кнопке, а как что б её сразу модальную загрузить? Потому что до события типа клика на кнопке ещё "дожить" надо. Люди добрые не подскажите?

Может я форму форму гружу неправильно? Мож правильно для получения модальной формы использовать старт с процедуры
Sub Main ?

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 06.03.2006 (Пн) 17:44

Насчет Sub Main мысль правильная. А вообще начинать с правильного проектирования проги...
Да и неплохо бы разобраться, что есть класс, а что объект
Весь мир матрица, а мы в нем потоки байтов!

Ефрейтор
Обычный пользователь
Обычный пользователь
 
Сообщения: 65
Зарегистрирован: 11.02.2005 (Пт) 12:43
Откуда: Алтай

Сообщение Ефрейтор » 06.03.2006 (Пн) 18:16

Ну что ж потихоньку доходит. Такой вопрос. Процедура:

Sub Main()
Dim f As New Form1()
f.Show()
{список команд}
End Sub

Форма показывается на доли секунд и исчезает с завершением программы. И {список команд} выполнятся не хочет

Sub Main()
Dim f As New Form1()
f.ShowDialog()
{список команд}
End Sub
Грузится форма всё работает. но как только вызывается метод Me.Hide или Me.Visible=false тут же снова происходит остановка программы. И {список команд} выполнятся не хочет.

{список команд}-события мыши в определённом приложении
А когда стартуешь не Sub Main, а непосредственно с формы всё работает нормально.
Чтобы это значило?

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 06.03.2006 (Пн) 19:20

Вместо
Ефрейтор писал(а): Sub Main()
Dim f As New Form1()
f.Show()
{список команд}
End Sub


Должно быть


Код: Выделить всё

    Sub Main()
        Dim f As New Form1()
        Application.Run(f)
        {список команд}
    End Sub
Весь мир матрица, а мы в нем потоки байтов!

mdx
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 169
Зарегистрирован: 06.01.2006 (Пт) 18:13
Откуда: I'm from Russia!

Сообщение mdx » 07.03.2006 (Вт) 13:38

{cписок команд} выполняется, только этого не заметно
This posting is provided "AS IS" with no warranties, and confers no rights.

Изображение

Ефрейтор
Обычный пользователь
Обычный пользователь
 
Сообщения: 65
Зарегистрирован: 11.02.2005 (Пт) 12:43
Откуда: Алтай

Сообщение Ефрейтор » 07.03.2006 (Вт) 19:18

Народ! С графикой на форме похоже проблемы, кто может помогите.
Вызываю вторую форму frmWeldEdit из первой формы frmStart, происходит ошибка связанная с событием Paint,

Private Sub frmWeldEdit_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
Dim g As Graphics
g = e.Graphics
g.DrawImage(m_objDrawingSurface, 0, 0, m_objDrawingSurface.Width, m_objDrawingSurface.Height)
End Sub


в в третьей строке:
g.DrawImage(m_objDrawingSurface, 0, 0, m_objDrawingSurface.Width, m_objDrawingSurface.Height)

там рисуется то три линии всего. Отдельно эта форма загружается нормально. Проект простенький. Кому не в лом человеку помочь, помогите. Готовый проект можно качнуть
http://www.inventor.mechmagic.com/kazak ... ation4.rar

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Сообщение Nord777 » 07.03.2006 (Вт) 23:14

Код: Выделить всё
Private Sub frmWeldEdit_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
        Dim g As Graphics

        g = e.Graphics
        '---->После того как форма загружена вызывается событие Paint,
        '---->а на этот момент твой битмэп(m_objDrawingSurface) еще не создан.
        '---->создается он в процедуре FormDrawWeldSymbol а она у тебя вызывается
        '---->при изменении состояния чекбокса.
        '---->Только вот непонятно зачем ты рисуешь на битмэпе?
        '---->рисуй сразу на форме
        g.DrawImage(m_objDrawingSurface, 0, 0, m_objDrawingSurface.Width, m_objDrawingSurface.Height)
    End Sub

Ефрейтор
Обычный пользователь
Обычный пользователь
 
Сообщения: 65
Зарегистрирован: 11.02.2005 (Пт) 12:43
Откуда: Алтай

Сообщение Ефрейтор » 08.03.2006 (Ср) 6:52

Nord777
Благодарствую добрый человек, сам бы я ещё долго не допонял бы.
А почему рисую в битмэпе, дак это потому что у меня книга по VB.NET такая. Я когда первый раз увидел сколько надо написать для того чтоб нарисовать линию, просто обалдел, т.к. в VB6 в сто раз проще.

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Сообщение Nord777 » 08.03.2006 (Ср) 12:16

Посмотрел твой код на свежую голову. Кое-чего изменил и сократил.
Это весь код:

Код: Выделить всё
Public Class frmWeldEdit
    Inherits System.Windows.Forms.Form
    Dim mypen As New Pen(Color.Black, 2.0!)
#Region "Работа с графикой формы"

    Private Sub frmWeldEdit_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
        FormDrawWeldSymbol(chkClosed.Checked, chkAssembly.Checked, e.Graphics)
    End Sub

    Private Sub chkClosed_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkClosed.CheckedChanged
        Me.Invalidate()
    End Sub

    Private Sub chkAssembly_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkAssembly.CheckedChanged
        Me.Invalidate()
    End Sub

    Public Sub FormDrawWeldSymbol(ByVal DrawCircleSymbol As Boolean, _
    ByVal DrawAssemblySymbol As Boolean, ByVal oG As Graphics)
        Const R As Integer = 18

        'смешение
        oG.TranslateTransform(70, 110)
        'сглаживание
        oG.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias

        oG.DrawLine(mypen, 0, Me.ClientSize.Height - 1, 0, 0)
        oG.DrawLine(mypen, 0, 0, Me.ClientSize.Width - 20, 0)

        If DrawCircleSymbol Then oG.DrawArc(mypen, -R, -R, 2 * R, 2 * R, 0, 360)
        If DrawAssemblySymbol Then
            oG.DrawLine(mypen, 0, 0, 0, -40)
            oG.DrawLine(mypen, 0, -40, -25, -40)
        End If

    End Sub

#End Region
End Class

Ефрейтор
Обычный пользователь
Обычный пользователь
 
Сообщения: 65
Зарегистрирован: 11.02.2005 (Пт) 12:43
Откуда: Алтай

Сообщение Ефрейтор » 09.03.2006 (Чт) 11:41

Nord777
Благадарствую, добрый человек, за принятое участие в моей проблеме.


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 116

    TopList