Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > .NET Languages
You last visited: Today at 16:59

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



[VB.NET]Control aus Form "sliden"

Discussion on [VB.NET]Control aus Form "sliden" within the .NET Languages forum part of the Coders Den category.

Reply
 
Old   #1
 
coladose's Avatar
 
elite*gold: 106
Join Date: Jun 2010
Posts: 2,256
Received Thanks: 3,866
[VB.NET]Control aus Form "sliden"

Hallo ihr lieben,

habe mich mal an nen neues "Projekt" gemacht und da ist mir die clevere Idee gekommen. Eine Function, die es ermöglicht auf Buttondrück ein bestimmtes Control horizontal aus der Form zu sliden. Doch meine Routine schafft das nicht flüssig. Ich hoffe ihr könnt mir helfen.

PHP Code:
Public Sub MoveLeft(ByVal outObject As Control)

        
Dim xLoc As Integer outObject.Location.X
        Dim yLoc 
As Integer outObject.Location.Y

        
Do Until xLoc 0
            Sleep
(1)
            
xLoc -= 3
            outObject
.Location = New Point(xLocyLoc)
        
Loop

        outObject
.Visible False
End Sub 
coladose is offline  
Old 12/11/2012, 22:10   #2

 
boxxiebabee's Avatar
 
elite*gold: 0
Join Date: May 2008
Posts: 1,222
Received Thanks: 500
Um es wirklich aus der Form raus zu sliden, brauchst du noch die Breite, außerdem ist Sleep(1) doch sehr gering.

Code:
Public Sub Slide(outObject As Control, direction As Integer)
	'
'             * 1 = Left
'             * 2 = Right
'             * 3 = Up
'             * 4 = Down
'             

	Dim xLoc As Integer = outObject.Location.X
	Dim yLoc As Integer = outObject.Location.Y

	If direction = 1 OrElse direction = 2 Then
		Dim width As Integer = outObject.Width
		Dim pWidth As Integer = outObject.Parent.Width
		While If(direction = 1, Not (xLoc <= -width), Not (xLoc >= pWidth))
			System.Threading.Thread.Sleep(30)
			xLoc = If(direction = 1, xLoc - 3, xLoc + 3)
			outObject.Location = New Point(xLoc, yLoc)
		End While
	Else
		Dim height As Integer = outObject.Height
		Dim pHeight As Integer = outObject.Parent.Height
		While If(direction = 3, Not (yLoc <= -height), Not (yLoc >= pHeight))
			System.Threading.Thread.Sleep(30)
			yLoc = If(direction = 3, yLoc - 3, yLoc + 3)
			outObject.Location = New Point(xLoc, yLoc)
		End While
	End If
	outObject.Visible = False
End Sub
boxxiebabee is offline  
Thanks
1 User
Old 12/12/2012, 19:39   #3
 
coladose's Avatar
 
elite*gold: 106
Join Date: Jun 2010
Posts: 2,256
Received Thanks: 3,866
Okay, der sleep war anfänglich auf 75ms doch lief und läuft es mit meiner Routine unflüssig. Werde mal deine testen und schauen ob es flüssiger geht
coladose is offline  
Old 12/13/2012, 18:22   #4



 
Sedrika's Avatar
 
elite*gold: 18
The Black Market: 103/0/0
Join Date: Sep 2009
Posts: 20,177
Received Thanks: 14,471
Statt sleep, wie sieht es aus mit Application.DoEvents() ?
Sedrika is offline  
Old 12/14/2012, 10:28   #5
 
tolio's Avatar
 
elite*gold: 2932
The Black Market: 169/1/0
Join Date: Oct 2009
Posts: 6,966
Received Thanks: 1,097
doevents oder [object].refresh (wenn ich mich recht erinnere) ist an dieser stelle äußerst angebracht da sonst im zweifel die entsprechenden anfragen an das gui erst nach einem kompletten durchlauf der funktion bearbeitet werden
tolio is offline  
Old 12/14/2012, 16:39   #6
 
elite*gold: 0
Join Date: Aug 2012
Posts: 236
Received Thanks: 94
Von Application.DoEvents ist abzuraten.
Angenommen, ich erstelle ein Fenster, welches von eins bis einer Million zählt und bei jedem Durchlauf eine Anzeige aktualisiert und eine Variable ändert. Nur möchte ich das Fenster nicht zum Einfrieren bringen und nutze daher Application.DoEvents. Nur dauert das einfach zu lange, und so wird das Fenster vorzeitig geschlossen. Aber die Schleife ist ja noch nicht zu Ende! So kann es dazu kommen, dass ein Prozess einfach so im Hintergrund weiterläuft. Es könnte auch passieren, dass zwischenzeitlich auf einen anderen Knopf gedrückt wird. Dann wird die Variable natürlich geändert, der Knopfdruck muss schließlich abgearbeitet werden. Wenn dann aber die Warteschlange abgearbeitet ist, kann ich mit der ursprünglichen Schleife fortfahren. Aber was ist das? Die Variable enthält jetzt einen vollkommen anderen Wert! Das ignoriere ich aber und durchlaufe brav weiter meine Schleife, dass das Programm nun fehlerhaft arbeitet, kann mir ja egal sein. Der Anwender wäre darüber aber womöglich weniger erfreut... Dann will ich ihm noch viel Erfolg bei seiner Arbeit wünschen, während er seinen verlorenen Daten hinterhertrauert.
Von Application.DoEvents ist abzuraten.
Tasiro is offline  
Old 12/14/2012, 20:20   #7
 
tolio's Avatar
 
elite*gold: 2932
The Black Market: 169/1/0
Join Date: Oct 2009
Posts: 6,966
Received Thanks: 1,097
dann hast du nen ziemliches **** programm... von aus schleifen rausspringen und einer kontroll instanz haste auch noch nichts gehört, naja egal.

doEvents oder eben refresh ist min genau dann angebracht wenn du im main thread das gui so verändern willst das ein weiterer thread zum verabeiten nicht in frage kommt, wie das hier meiner meinung nach der fall ist
tolio is offline  
Thanks
1 User
Old 12/15/2012, 17:41   #8
 
elite*gold: 0
Join Date: Aug 2012
Posts: 236
Received Thanks: 94
Quote:
Originally Posted by tolio View Post
dann hast du nen ziemliches **** programm... von aus schleifen rausspringen und einer kontroll instanz haste auch noch nichts gehört, naja egal.
Verbreite doch bitte nicht solche Lügen... Ich habe kein solches Programm, das war nur ein Beispiel. Und natürlich habe ich "von aus schleifen rausspringen und einer kontroll instanz [...] gehört", wo denkst du hin?

Quote:
doEvents oder eben refresh ist min genau dann angebracht wenn du im main thread das gui so verändern willst das ein weiterer thread zum verabeiten nicht in frage kommt, wie das hier meiner meinung nach der fall ist
Warum sollte man das Fenster so verändern wollen, dass Threads, die irgendetwas verarbeiten, nicht in Frage kommen? Was hast du nur gegen Threads? Mit Threads geht das doch wunderbar: der Button bewegt sich, ich muss mich nicht erst von dem Button "freiklicken", das Programm läuft nicht nach dem Schließen des Fensters weiter, die Schleife wird nicht von Dateidialogen unterbrochen (so ein Verhalten ist natürlich auch mit Threads möglich), es wird kein Application.DoEvents genutzt.
Tasiro is offline  
Reply




All times are GMT +2. The time now is 16:59.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2024 elitepvpers All Rights Reserved.