|
Страници по тази тема: 1 | 2 | >> (покажи всички)
Тема
|
Перхвърляне от едн форма в друга във VB.NET
|
|
Автор | VB.NET (Нерегистриран) |
Публикувано | 27.06.04 03:49 |
|
Май ще спечеля гофретата по активност в този клуб, но продължавам с въпросите. Предполагам, че решението им може е полезно и за други освен за мен.
Нека първоначалната форма, която апликацията отваря е Form1. От Form1 след това отиваме във Form2. Дотук добре. Но как от Form2 да отидем обратно във Form1 или в друга някоя форма, изтривайки напълно Form2? Кодът, който се опитвам да използвам е следният:
В Module1 пиша:
Module Module1
Public frmForm1 As New Form1
Public frmForm2 As New Form2
'note: тук добавям и други форми, ако е нужно …
Sub main()
frmForm1.ShowDialog()
‘това ми е началната форма, която се отваря
‘при стартиране на програмата
End Sub
End Module
Във Form1 правя бутон със следното съдържание:
Public Class Form1
Inherits System.Windows.Forms.Form
Private StarataForma1 As New Form1
Private StarataForma2 As New Form2
[Windows Form Designer generated code]
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
StarataForma1.Hide()
'Това скрива началната форма
StarataForma2.ShowDialog()
'А това отваря новата форма
End Sub
End Class
Във Form2 правя бутон със следното съдържание:
Public Class Form1
Inherits System.Windows.Forms.Form
Private StarataForma1 As New Form1
Private StarataForma2 As New Form2
[Windows Form Designer generated code]
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
StarataForma2.Hide()
'Това скрива настоящата форма
StarataForma1.ShowDialog()
'А това отваря началната форма
End Sub
End Class
При стартиране обаче ми излиза съобщение за грешка:
An unhandled exception of type 'System.StackOverflowException' occurred in Unknown Module.
Някой има ли идея как този проблем може да се реши?
| |
Тема
|
Re: Перхвърляне от едн форма в друга във VB.NET
[re: VB.NET]
|
|
Автор | VBProgrammer (Нерегистриран) |
Публикувано | 27.06.04 07:13 |
|
Zabolia me korema ot smiash.
Ot godini ne biah vizdal takova nesto.
MS napraviaha VB prekaleno VC++ podoben.
Konkretno gyrmi zastoto si napisal - Private StarataForma1 As New Form1
Obache, za da stane tova koeto predpolagam iskash triabva da si prochetesh kakvo znachi "modal" i koga i zakakvo se izpolzvat modalni formi i kakvo stava kogato vdignesh takava.
Ima i drugi nesta, koito biha ti svyrshili rabota - kato Wizards i TabControls.
| |
Тема
|
Re: Перхвърляне от едн форма в друга във VB.NET
[re: VBProgrammer]
|
|
Автор | VB.NET (Нерегистриран) |
Публикувано | 27.06.04 08:41 |
|
Не работи без New. Ето така проработи, но нe скрива предната форма, когато се появи новата форма:
В Module1 пиша:
Module Module1
Public StarataForma1 As New Form1
Public StarataForma2 As New Form2
'note: тук добавям и други форми, ако е нужно …
Sub main()
StarataForma1.ShowDialog()
‘това ми е началната форма, която се отваря
‘при стартиране на програмата
End Sub
End Module
Във Form1 правя бутон със следното съдържание:
Public Class Form1
Inherits System.Windows.Forms.Form
[Windows Form Designer generated code]
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim StarataForma1 As New Form1
StarataForma1.Hide()
'Това скрива началната форма
Dim StarataForma2 As New Form2
StarataForma2.ShowDialog()
'А това отваря новата форма
End Sub
End Class
Във Form2 правя бутон със следното съдържание:
Public Class Form1
Inherits System.Windows.Forms.Form
[Windows Form Designer generated code]
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim StarataForma2 As New Form2
StarataForma2.Hide()
'Това скрива настоящата форма
Dim StarataForma1 As New Form1
StarataForma1.ShowDialog()
'А това отваря началната форма
End Sub
End Class
Как да се скрие предната форма след като се появи новата форма обаче?
| |
Тема
|
Re: Перхвърляне от едн форма в друга във VB.NET
[re: VB.NET]
|
|
Автор |
killall (Дядо Мраз) |
Публикувано | 28.06.04 13:45 |
|
Май хич ама хич не ти е ясно какво прави New :)
Айде да се опитаме да погледнем във кода ти :
Module Module1
Public StarataForma1 As New Form1 'тука създаваш нова инстанция на Form1
Public StarataForma2 As New Form2 'тука създаваш нова инстанция на Form2
'note: тук добавям и други форми, ако е нужно …
Sub main()
StarataForma1.ShowDialog() 'Показваш инстанция на Form1
‘това ми е началната форма, която се отваря
‘при стартиране на програмата
End Sub
End Module
До тука добре, но после ...
Public Class Form1
Inherits System.Windows.Forms.Form
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim StarataForma1 As New Form1 'тука създаваш ОТНОВО нова инстанция на Form1
StarataForma1.Hide() 'И си я скриваш (няма нужда, тя си е скрита по дефолт)
Dim StarataForma2 As New Form2 'тука създаваш ОТНОВО нова инстанция на Form2
StarataForma2.ShowDialog() 'Показваш си я, хубаво ...
End Sub
End Class
Public Class Form2
Inherits System.Windows.Forms.Form
[Windows Form Designer generated code]
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim StarataForma2 As New Form2 'тука създаваш ОТНОВО нова инстанция на Form2
StarataForma2.Hide()
Dim StarataForma1 As New Form1 'тука създаваш ОТНОВО нова инстанция на Form1
StarataForma1.ShowDialog()
End Sub
End Class
А сега да помислим как трябва да е ... например така :
Module Module1
Public StarataForma1 As New Form1
'note: тук НЕ добавям и други форми, ако е нужно ЩОТО НЕ ИМ Е МЯСТОТО ТУКА
Sub main()
StarataForma1.ShowDialog()
End Sub
End Module
Public Class Form1
Inherits System.Windows.Forms.Form
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Me.Hide
Dim StarataForma2 As New Form2
StarataForma2.ShowDialog()
StarataForma2.Dispose
StarataForma2 = Nothing
Me.Show
End Sub
End Class
Public Class Form2
Inherits System.Windows.Forms.Form
[Windows Form Designer generated code]
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Me.Close
End Sub
End Class
Надявам се да ти се е изяснило малко ...
_ _ _
Time is like a drug. Too much of it kills you.
| |
Тема
|
Re: Перхвърляне от едн форма в друга във VB.NET
[re: VBProgrammer]
|
|
Автор |
nevil (Unikalen) |
Публикувано | 28.06.04 19:06 |
|
Po skoro MS napraviha VB kato Java.
| |
Тема
|
Re: Перхвърляне от едн форма в друга във VB.NET
[re: killall]
|
|
Автор | VB.NET (Нерегистриран) |
Публикувано | 28.06.04 20:48 |
|
Много благодаря. Чудесно обяснение. Нещата съвсем не са така очевидни. Оказа се, че Module1 не е необходим. Също така, както изглежда, това, което трябва да се разбре е не толкова как работи New, a фактът, че макар бутонът на Form1 да е скрит oт Me.Hide() и да сме отишли във Form2, работата в този бутон е все още недовършена. Поради това, когато си свършим работата с Form2, то пак се връщаме в бутона на Form1, за да си довършим работата и там, т.е. да изпълним Me.Show() (т.е. наново да покажем Form1). Ето кодът, който работи, благодарение на това, което обясни:
Public Class Form1
Inherits System.Windows.Forms.Form
[Windows Form Designer generated code]
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Me.Hide()
Dim F2 As New Form2
F2.ShowDialog()
Me.Show()
End Sub
End Class
Public Class Form2
Inherits System.Windows.Forms.Form
[Windows Form Designer generated code]
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Me.Dispose()
End Sub
End Class
| |
Тема
|
Re: Перхвърляне от едн форма в друга във VB.NET
[re: killall]
|
|
Автор |
ГT (пристрастен) |
Публикувано | 29.06.04 22:39 |
|
Имам един въпрос, който ми се струва, че е свързан с обсъждания проблем. Как може да се спре изпълнението на останалата част от една процедура (вътре в даден sub) в заисимост от изпълнението на дадено Булево условие? Разбира се един начин е да се постави Булевото условие в друга форма, да речем, Form4, която да се извика, когато е необходимо да се спре изпълнението na процедурата в началната Form3. Така, във Form3 ще се върнем, за да си довършим процедурата само след като условието във Form4 е изпълнено. Но как може извикването на Form4 да се избегне и цялата тази работа да се свърши само във Form3?
| |
Тема
|
Re: Перхвърляне от едн форма в друга във VB.NET
[re: ГT]
|
|
Автор |
killall (Дядо Мраз) |
Публикувано | 30.06.04 12:10 |
|
Я още веднъж и по-бавно че нищо не разбрах
А ако дадеш и пример няма да е зле. Кви условия, кви форми, какво е общото между тях ?
_ _ _
Time is like a drug. Too much of it kills you.
| |
Тема
|
Re: Перхвърляне от едн форма в друга във VB.NET
[re: killall]
|
|
Автор |
ГT (пристрастен) |
Публикувано | 30.06.04 17:41 |
|
Да речем имаш следната ситуация.
Imports System.Drawing.Drawing2D
Imports System.IO
Public Class Form3
Inherits System.Windows.Forms.Form
<различни Dim …>
[Windows Form Designer generated code]
Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
<някакъв код представящ в графичен вид данни от файл с данни>
Тук изпълнението на програмата трябва да спре, за да се въведат x-координатите на две точки от кривата в две променливи X1 и X2 чрез поставяне на курсора върху всяка една от точките и кликване с бутона на мишката. За целта трябва някак да се констатира дали е кликнато върху бутона и, ако е, се извиква отделна sub, която присвоява съответната стойност на X1. При второ кликване се присвоява стойност на X2. Сега, след като сме формирали стойностите на X1 и X2 програмата може да продължи изпълнението си:
<код използващ стойностите на X1 и X2 получени горе>
End Sub
End Class
Как във VB.NET се установява, че бутонът на мишката е кликнат (не знам с коя българска дума да го кажа)?
| |
Тема
|
Re: Перхвърляне от едн форма в друга във VB.NET
[re: ГT]
|
|
Автор |
killall (Дядо Мраз) |
Публикувано | 01.07.04 18:17 |
|
Ами най-лесно ще стане май като прихващаш събитието MouseUp.
Нещо такова например :
Dim X1 as integer=-1
Dim X2 as integer=-1
...
Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
<някакъв код представящ в графичен вид данни от файл с данни>
if (X1+X2)<>-2 then
<код използващ стойностите на X1 и X2>
else
AddHandler Me.MouseUp,Me.Form1_MouseUp
endif
end sub
Private Sub Form1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
if X1=-1 then
X1=e.X
elseif X2=-1 then
X2=e.X
else
RemoveHandler Me.MouseUp,Me.Form1_MouseUp
endif
End Sub
_ _ _
Time is like a drug. Too much of it kills you.
| |
|
Страници по тази тема: 1 | 2 | >> (покажи всички)
|
|
|