Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 | 2 |

 

  Вопрос: Синий бекграунд с периливом Добавлено: 12.05.06 00:12  

Автор вопроса:  student-uni
Хочу при запуске формы залить всё оставшееся на экране
синим цветом с плавным переходом от тёмного к светлому.

1. как это осуществить ?

я сделал одну форму Form1 на весь экран без бордюров
и залил её сплошным синим цветом
и вторую Form 2 - собственно моя прога.

Стартовая форма Form1
и в ее событии Form1_ЛОАД происходит

Dim f2 as new Form2
form2.show

ПРоблема -
 Если юзер в это время клацает другие проги
может получиться так, что синяя Form1 - поверх Form2

Вопрос - как сделать чтоб этого не случилось?
Чисто теоретически мне нужно событие
под названием Form1_загрузилась и загрузка закончена,
но такого события нет


и второй вопрос
Как сделать плавный переход цвета ?

Спасибо

Ответить

  Ответы Всего ответов: 16  

Номер ответа: 1
Автор ответа:
 HOOLIGAN



Вопросов: 0
Ответов: 1066
 Профиль | | #1 Добавлено: 12.05.06 01:32
а) вторая форма должна быть модальной по отношению к первой. Или иметь свойство TOPMOST.
б) слово градиент слышал?

Ответить

Номер ответа: 2
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #2 Добавлено: 12.05.06 03:14
'VS 2005

Imports System.Drawing.Drawing2D

Public Class Form1

    Private WithEvents formChild As New Form2

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.FormBorderStyle = Windows.Forms.FormBorderStyle.None
        Me.WindowState = FormWindowState.Maximized
    End Sub

    Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
        Dim Brush As New LinearGradientBrush(Me.ClientRectangle, Color.DarkBlue, Color.SkyBlue, LinearGradientMode.ForwardDiagonal)
        With e.Graphics
            .FillRectangle(Brush, Me.ClientRectangle)
            .DrawString(";Design by EROS © 2006 N.Novgorod", New Font("Tahoma", 16, FontStyle.Italic), Brushes.White, 25, 25)
        End With
        Brush.Dispose()
    End Sub

    Private Sub Form1_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown
        With formChild
            .StartPosition = FormStartPosition.CenterScreen
            .MinimizeBox = False
            .MaximizeBox = False
            .FormBorderStyle = Windows.Forms.FormBorderStyle.FixedDialog
            .ShowDialog()
        End With
    End Sub

    Private Sub formChild_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles formChild.FormClosed
        Me.Close()
    End Sub

End Class

Ответить

Номер ответа: 3
Автор ответа:
 student-uni



Вопросов: 122
Ответов: 257
 Профиль | | #3 Добавлено: 12.05.06 13:56
вот, так я в событиях формы этого события Form1_Shown не нахожу (VS2003)

Ответить

Номер ответа: 4
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #4 Добавлено: 12.05.06 15:26
Перенеси этот код в Load.. будет тоже самое..
Я пробовал, все работает и отображается как надо..

Ответить

Номер ответа: 5
Автор ответа:
 Neco



ICQ: 247906854 

Вопросов: 133
Ответов: 882
 Web-сайт: neco.pisem.net
 Профиль | | #5
Добавлено: 12.05.06 16:44
Чтобы добиться реального виндозного TOPMOST'а (т.е. когда форма поверх всех ТВОИХ форм, но при этом другие проги могут её перекрывать), надо делать так:

Public Class Form1
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim fff As New Form2
        fff.Show()
    End Sub
    Protected Overrides ReadOnly Property CreateParams() As System.Windows.Forms.CreateParams
        Get
            Dim params As CreateParams = MyBase.CreateParams
            params.ExStyle += 8
            Return params
        End Get
    End Property
End Class


Чтобы касается события "загрузка окончена", можно поэкспериментировать с overrid'ом OnCreateControl и вообще в эту сторону (если не работает, так как сказал EROS).

Ответить

Номер ответа: 6
Автор ответа:
 student-uni



Вопросов: 122
Ответов: 257
 Профиль | | #6 Добавлено: 12.05.06 18:28

у меня 2003 и получаю

Keyword is not Valid as indentifier

на Me.Paint в

Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint


а также

System.Windows.Forms.FormClosedEventArgs is not devined

на
 System.Windows.Forms.FormClosedEventArgs)

Ответить

Номер ответа: 7
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #7 Добавлено: 13.05.06 00:50
student-uni
увы.. с 2003 ничем помочь не могу.. этот код я на 2005 делал. Значит в чем то не стыковка-ищи.. (((

Ответить

Номер ответа: 8
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #8 Добавлено: 13.05.06 01:03
Me.Paint замени на MyBase.Paint

Ответить

Номер ответа: 9
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #9 Добавлено: 13.05.06 01:27
а также

System.Windows.Forms.FormClosedEventArgs is not devined

на
System.Windows.Forms.FormClosedEventArgs)

А вот тут я ваще нифига не понимаю.. в чем разница???

Ответить

Номер ответа: 10
Автор ответа:
 student-uni



Вопросов: 122
Ответов: 257
 Профиль | | #10 Добавлено: 13.05.06 12:36
это пардон, это я загнул.


Me.Paint замени на MyBase.Paint

это я сделал , беда в другом


Private Sub Form1_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown


События Shown - это то самое событие которого нет в 2003. См выше

Чисто теоретически мне нужно событие
под названием Form1_загрузилась и загрузка закончена,
но такого события нет



Я думаю попробовать тремя формами

Form0 - стартовая запускает Form1-которая делвет бекграунд, потом она же (Form0) запускает Form2-модально - где собственно прога. Потом по какому нибудь событию на Form2 - напр движение мышки - я закрою к тому времени загруженную Form0.

Конечно это через Житомир на Пензу, может кто лучше придумает.

Ответить

Номер ответа: 11
Автор ответа:
 Neco



ICQ: 247906854 

Вопросов: 133
Ответов: 882
 Web-сайт: neco.pisem.net
 Профиль | | #11
Добавлено: 13.05.06 13:10
Лучше уж флаг какой-нить ввести и по Activate считать Shown.
if not bActivated then
    ' событие
    bActivated = true
end if


А самое нормальное - взять 2005-й. 2003-й реально не доработан.

Ответить

Номер ответа: 12
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #12 Добавлено: 13.05.06 14:10
student-uni, на самом деле.. кривее не придумаешь!!
Прислушайся, Neco дело говорит.. через флаг вполне реально сделать, и нефига огород городить с тремя формами..

Ответить

Номер ответа: 13
Автор ответа:
 student-uni



Вопросов: 122
Ответов: 257
 Профиль | | #13 Добавлено: 13.05.06 21:47

.. кривее не придумаешь!!

Ха, Кривее ? да запросто. Второй екзешник :-) :-)


Лучше уж флаг какой-нить ввести и по Activate считать Shown.


Флаг ? !! Это булеву переменную что-ли ?

Ответить

Номер ответа: 14
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #14 Добавлено: 13.05.06 23:46
Флаг ? !! Это булеву переменную что-ли ?

Именно булеву.. Дело в том,что Activate будет срабатывать каждый раз при активации формы, а тебе надо этого избежать и имитировать событие Shown только 1 раз..
Объяви приватное событие на уровне формы, и в коде который привел Neco инициируй его, получишь то что хотел..

Ответить

Номер ответа: 15
Автор ответа:
 student-uni



Вопросов: 122
Ответов: 257
 Профиль | | #15 Добавлено: 14.05.06 14:36
Так зачем тогда булева переменная :-), это же форма - бекграунд, она всё равно один раз только активируется, тк. все последующие формы - модальные. Просто запускаем Форму2 при событии Активэйт Формы1.
Спасибо .

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам