Клубове Дир.бг
powered by diri.bg
търси в Клубове diri.bg Разширено търсене

Вход
Име
Парола

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 02:17 29.09.24 
Компютри и Интернет
   >> Visual Basic
Всички теми Следваща тема *Кратък преглед

Страници по тази тема: 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 | >> (покажи всички)
Всички темиСледваща тема*Кратък преглед
Клуб :  


Clubs.dir.bg е форум за дискусии. Dir.bg не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Dir.bg
За Забележки, коментари и предложения ползвайте формата за Обратна връзка | Мобилна версия | Потребителско споразумение
© 2006-2024 Dir.bg Всички права запазени.